# 纠错码(Error Correcting Codes)
- 在信息传输中,信息往往会丢失甚至损坏。一个比较容易想到的方法是重复传输信息直到丢失的信息被补全,但这样效率很低。本节我们介绍一种新的信息传输思路——加入“纠错码”。纠错码是信息论研究中的一个重要部分,也是控制论、通信理论等的基础,同时也在现实生活的各方面都有着重要的应用。
- 纠错码主要分为两种:一种是基于有限域多项式的代数编码,另一种则是基于图论的组合编码。本节主要讨论的是前者,其也被称为里德-所罗门码(Reed-Solomon Code),由它的两位发明者命名。
# 擦除错误(Erasure Errors)
- 我们设想以下场景:在互联网中,我们尝试将信息通过打包进行传输。由于传输线路的不稳定性,一些包在传输过程中可能会丢失。具体而言,假设信息总共由个数据包组成,其中最多有个数据包会丢失。
- 那么,下面我们会展示如何将个数据包通过编码扩增为个,并让接收者在接收到任意个后都能还原出原始信息。
- 首先,我们可以不失一般性地假设每个数据包里都是一个模素数后的一个数(只要足够大,覆盖所有数据包的数值范围即可)。接下来我们就能用上的多项式处理这个问题【当然现实中会直接在2的幂次值域(比如)上处理】
- 设个数据包分别为,且,则:
- 存在唯一的次多项式满足:
- 基于,我们就可以生成冗余的数据包:。
- 这样我们获得任意个数据包,就可以利用拉格朗日插值重构出的表达式,进而推出。
- 根据多项式理论,这种纠错编码已经达到了理论最优——如果收到的冗余数据包少于,那么就无法再重新推出原始信息。
# 多项式插值补充
- 除了拉格朗日插值,这里再补充一种多项式插值方法:
- 已知次多项式的个点:,将它们分别代入以下方程:
这样就得到了一个关于的线性方程组,求解即可。
- 已知次多项式的个点:,将它们分别代入以下方程:
- 很容易证明最终得到的解是唯一的。【利用线性代数的知识易证】
# 一般性错误(General Errors)
- 接下来将擦除错误推广为更一般的错误——传输的信息中有一些被干扰,即正确的信息中混杂着错误信息。
- 然而,即使这样我们也可以使用多项式的理论得出:对于个数据点的信息中有个被干扰,那么只需要再多发送个数据点即可克服干扰,得到正确信息。具体说明如下:
- 类似上面的情景,依然假设原始数据点为,发送的数据点为,而接收者收到的数据点为,且其中至多有个数据点被干扰(替换为错误数据点)。(注:上面的所有数据点的值域均为,为足够大的质数)
- 那么对于接收者而言,他需要通过收到的个数据点反推出次多项式(至少需要个正确的点),才能得到原始信息。
- 虽然接收者不知道哪些点是正确的,但他知道个数据点中至少个点是正确的。如果找出个点能确定一个多项式的话,那么这个多项式与正确的多项式一定有至少数据点重合,这恰恰就是确定一个多项式的最小点数。所以接收者得到的多项式一定是正确的多项式。
- 那么,问题的关键就在于如何确定个错误数据点的编号。如果直接暴力搜索的话最坏需要搜索次,复杂度大概是指数级别,不太现实。我们实际会使用下述操作(也被称为伯利坎普-韦尔奇算法(Berlekamp-Welch algorithm)):
- 设正确的次多项式为,并假设错误数据点的编号为。我们另外假设一个次多项式(也称为错误定位多项式)
- 那么,我们就有以下重要等式:
这相当于与两个情形的并集。
- 接着我们定义,则为次多项式。对与均进行待定系数,再代回上面的等式得:
其中第三个方程可以列为方程组,未知变量有个,方程也有个,最终就能解出唯一解,进而得到,并通过得到。
- 最后我们将正确的编号(通过得到)代入中就能还原出原始信息。
- 设正确的次多项式为,并假设错误数据点的编号为。我们另外假设一个次多项式(也称为错误定位多项式)
# 拓展:纠错码本质的探索
- 最后我们进行一些拓展,不局限于里德-所罗门码,讨论上面这种用(或)项解决中个错误的思想是否具有普适性。这里我们主要考察原始信息经过纠错编码后得到的内容:(称其为 “码词”(codewords),记为)
- 现在将码词视为一个向量(长度为),并引入以下概念:
- 汉明距离(Hamming Distance):衡量两个码词向量之间的相似程度。表达式:
- 考虑任意两个不同的信息和,它们对应的码词与之间可能的最短距离:
可以反映编码的干扰敏感度(最短距离越短,则敏感度越高,反之越低);比如,对于一组长度固定的信息集合中的信息,它们的最短距离即为,则它们就没有任何抗干扰能力。
- 对于擦除错误而言,可以推出:当码词的最短距离为或更高时,其就能处理包含个擦除错误的数据点。而当最短距离时,就可能从擦除错误的数据点中得到几个不同的还原信息。所以已是最优。
- 对于一般性错误而言情况复杂一些。我们可以从干扰者的角度考虑一般错误数量与汉明距离的关系:
- 假设原始码词与干扰目标码词之间的汉明距离为。干扰者试图让接收者在接受到干扰码词后倾向还原为干扰目标码词,但最高的干扰数据点数小于。
- 那么,如果干扰者的最高干扰数据点数小于,那么接收者还是能成功还原出正确的原始码词。
- 所以,对于个数据点传输最多有个一般错误的情况,码词间的最短距离就至少是,而里德-所罗门编码(将个数据点扩充为个)就恰好满足这个条件。下面就来证明里德-所罗门编码得到的码词最短距离恰为:
- 最短距离。我们尝试构造两个码词,使它们的汉明距离不超过:
- 设,两个向量除了最后一项不同,其他均相同。
- 它们分别通过最高次多项式与生成码词与(长度均为)。又因为两个原始向量前项均相同,所以对应码词的前项也相同。所以它们的不同项最多有,即它们的汉明距离不超过。
- 最短距离。事实上我们只需要证明最短距离的情况不成立即可。
- 这里我们同样设两个码词与,分别通过最高次多项式与生成(注意和上面的例子独立)。
- 如果,那么它们的相同项就至少为,对应的两个多项式就有个共同点,所以推出两个多项式完全相同。但这和我们假设的码词生成的多项式不同相矛盾,故反证法成立。
Yeah,CS 70的离散数学部分到这里就结束了,后面就都是概率论的部分了。考虑到笔者在校内已基本学习了这部分内容,故不会再这里重复记录。也就是说,本课程笔记就此完结!めでたしめでたし!
简单回顾一下,这门课是笔者UCB课程系列笔记的第一门课,当时选这门课主要是补充一些离散数学的相关知识我们这一届的培养方案把离散数学这门课给删掉了,或许是考虑到双学位压力比较大doge,这样能更好理解人工智能导论和数据结构这两门课(虽然有点用但不多)
当然,因为只有半学期的量,所以和国内的离散数学课内容相比,笔者感觉学的内容不算很多,但其实精髓应该基本都覆盖到了;况且,在这个AI时代,似乎概率论的作用比离散数学还更重要一些(
好啦,差不多就这样,希望你看得舒服,笔者再去补别的课了~
