里德-所罗门码
里德-所罗门码（，簡稱里所码或 ）是一种前向錯誤更正的信道编码，对由校正过采样数据所产生的有效多项式。编码过程首先在多个点上对这些多项式求冗余，然后将其传输或者存储。对多项式的这种超出必要值的采样使得多项式超定（过限定）。当接收器正确地收到足够的点后，它就可以恢复原来的多项式，即使接收到的多项式上有很多点被噪声干扰失真。
里德-所罗门码被广泛地应用于各种商业用途，最显著的是在 CD、DVD、蓝光光盘和QR code上的使用；在数据传输中，它也被用于 DSL 和 WiMAX；广播系统中 DVB 和 ATSC 也闪现着它的身影；在计算机科学里，它是 RAID 6 标准的重要成员。
里德-所罗门码是定长码。这意味着一个固定长度输入的数据将被处理成一个固定长度的输出数据。在最常用的（255,223）里所码中，223个里德-所罗门输入符号（每个符号有8个位元）被编码成255个输出符号。
里德-所罗门码，如同卷积码一样，是一种透明码。这代表如果信道符号在队列的某些地方被反转，解码器一样可以工作。解码结果将是原始数据的补充。但是，里所码在缩短后会失去透明性。在缩短了的码中，「丢失」的位元需要被0或者1替代，这由数据是否需要补足而决定。（如果符号这时候反转，替代的0需要变成1）。于是乎，需要在里所解码前对数据进行强制性的侦测决定（「是」或者「补足」）。
在里德-所罗门数据编码背后的核心可以形象化的表示为多项式。这种码依靠一个代数理论，这个代数理论说明任何長度為k的碼可唯一表示成一個階數(degree)至多為k-1的多項式。
发送者表明一个在有限域中的k-1阶的多项式，它表示k个数据点。这个多项式就根据它在各点的赋值被“编码”，实际传送的是这些值。 在資訊传输中，一些值会被破坏。所以，实际发送的点不止k个。只要正确地接收了足量的数值，接收方就可以推算出原始多项式，进而译出原始数据。
同样的，我们可以通过插值来修正曲线。RS码可以将一组有错误序列的信息码转换到找回画出原始曲线的多项式的系数。
给定一个有限域F和多项式环F[x]，令n和k满足formula_1.选择F中的n个确定元素，记作formula_2.码本C是通过计算F中每个formula_3的阶数小于k的多项式得到的值，即
C是formula_5码;换句话说，是F中长为n，维度为k，最小汉明距离为n-k+1的线性码。
一个RS码满足以上的形式，并遵循:集合formula_2是formula_7域中所有非零元素组成的集合（因而,formula_8）。
RS码在实际应用中，常常使用一个有formula_9个元素的有限域F。这样，每个符号就可以表示为一个m比特的数值。发送方以编码块的形式发送数据点，编码块的符号数量为formula_10个。这样，一个用于8比特符号的RS码每块有formula_11个符号。 (在字节型计算机系统普及的今天，这个数字很实用。)编码块中的数据符号k是一个设计参数，formula_12。在一个n = 255的符号块中，常用formula_13的8比特数据符加上32个8比特校验符来编码，用formula_14表示，每块最多可以校正16个符号错误。
由有限域中的非零元素构成的集合formula_15可以写作formula_16，formula_17是一个"单位的n次本原根"。习惯上按照这种顺序对RS码进行编码。由于formula_18，并且对于每个多项式formula_19，函数formula_20是与它同次的多项式，因而RS码是循环的。
1968年，Berlekamp发现了一种BCH码解码算法。由于RS码可以看作是BCH码的特例，该算法也可用于解码RS码。
通过RS码的另一种定义方法，可以很容易的看出RS码是BCH码的一种特例。令有限域formula_21大小为formula_22, formula_17为formula_7的formula_25次原单位根，亦即formula_18，且对所有小于formula_25的正整数formula_28,均有formula_29。给定formula_30, formula_31是RS码的码字当且仅当formula_32是多项式formula_33的根。这样，很容易可以看出RS码是一种多项式码，也就是BCH码。生成多项式formula_34为formula_32的最小多项式，而码字为能够整除多项式formula_34的多项式。
RS码的两种定义方式有着非常大的区别，而它们的等价关系并不是显而易见的。在第一种定义中，码字是多项式的值，而在第二种定义中，码字是多项式的系数。另外，第一种定义要求多项式具有特定的比较小的幂次，而在第二种定义中，多项式需要有特定的根。
这两种定义的等价性可以通过有限域上的离散傅立叶变换来证明。离散傅立叶变换建立起了多项式的系数与值之间的对偶关系。这种对偶关系可以不严格的概述如下：令formula_19和formula_38为两个次数小于formula_25的多项式。如果多项式 formula_19的在formula_41（formula_42, formula_17是1的n次原单位根）处的值是formula_38的系数，那么formula_38在这些点上的取值在经过乘以一个特定的系数和重新排列以后就成为了formula_19的系数。
严格的说，令 同时假定formula_19和formula_38为离散傅立叶变换对，那么formula_19和formula_38的系数和取值有如下关系：对所有的formula_42，formula_54并且formula_55.
这样，我们可以得出formula_56是满足RS码第一种定义方式的码字
这样，两种定义方式的等价性便得到了证明。
RS码是一个formula_67码，是一种定义在有限域formula_7上的长度为formula_25,信息长度为formula_58，最短汉明距离为formula_71的线性分组码。由于这种编码满足Singleton界，因此它是一种最大距离可分码。由于码长为formula_25信息长度为formula_58的码的最大汉明距离为formula_71，所以在这种意义下RS码是一种最优的编码方法。
RS码的纠错能力由最短汉明距离决定，为formula_71。如果预先并不知道错误的位置，RS码最多可以纠正formula_76个错误。而在某些情况下，我们可以预知错误的位置（比如BEC信道），此时RS码最多可以纠正formula_77个错误。如果我们可以预先知道formula_78个错误位置，而此外还有formula_79个未知的错误位置，那么在满足formula_80的情况下，我们可以完全纠正这些错误。
在实际应用中，RS码经常使用大小为formula_9的有限域。在这种情况下，每个符号都包含有formula_82比特的信息。发送者将编码后的分组发送给接受者，每个分组通常含有formula_83个符号。例如，定义在formula_84上的RS码每个分组包含有formula_85个符号。由于计算机通常以字节为单位来处理数据，因此定义在formula_84的RS码非常流行。设计参数formula_58需要满足formula_88，对于定义在formula_84上的RS码，通常选择formula_90。这个RS码包含有223个数据符号和32个校验符号，表示为formula_91RS码，它最多可以纠正16个符号错误。
RS码的这种性质使得它非常适合纠正传输系统中的突发错误。这是由于不论一个符号中有多少个比特发生错误，都只发生了一个符号错误。而对于不发生突发错误的传输系统，RS码的性能通常不如普通的二元码，