首页
CtrlK
Mleon的头像

什么是里德-所罗门码?计算机如何恢复丢失的数据

单集封面

什么是里德-所罗门码?计算机如何恢复丢失的数据

03-16
8 次观看
Mleon的头像
Mleon
粉丝:156
主题:5
描述:9
例子:7
其他:4
字数:2733

什么是里德-所罗门码?计算机如何恢复丢失的数据

What are Reed-Solomon Codes? How computers recover lost data

03-16
8 次观看
Mleon的头像
Mleon
粉丝:156
Mleon的头像
Mleon
粉丝:156
主题:5
描述:9
例子:7
其他:4
字数:2733

Reed-Solomon码

链接 参考内容

https://youtu.be/1pQJkt7-R4Q?si=WMn1S-zb8ovxXJ0K

数据丢失

场景 数据丢失

想象我们需要通过网络传输4个整数。如果传输过程中可能丢失任意2个数据,如何保证接收方能还原原始信息?

冗余编码

答案是通过冗余编码:发送端将原始4个数据扩展为6个数据(添加2个冗余),即使丢失任意2个数据,接收方仍能通过剩余4个数据还原原始信息。

数据恢复 冗余编码

例如要传输数据[2, 4, 3, 1],通过数学计算生成冗余数据[0, 2],构成 [2, 4, 3, 1, 0, 2]。这样即使丢失了任意两个数据,例如2 ? 3 1 ? 2,也能够恢复原始数据。

应用 纠删应用

这种纠删方法在生活中广泛存在:

  • 光盘修复:CD表面划痕导致数据丢失,但仍能正常使用

  • 二维码容错:即使30%面积污损仍可扫描

  • 太空通信:深空探测器与地球的弱信号传输

模运算

过渡 数学知识

在解释这种纠删原理前,需要先补充些数学知识。

有限运算

模运算(Modular Arithmetic)是一种数学运算,用于计算两个整数相除后的余数。

  • 符号表示amodn,读作“a 模 n”。

  • 含义:求整数 a 除以正整数 n 后的余数,结果在0n1之间。

公式
a=qn+r(0r<n) 其中,q是商,r=amodn 是余数。

模5运算

例如模5运算中,所有结果都在{0,1,2,3,4}范围内。

运算类型

计算示例

加法

3+42

减法

243

乘法

3×42

除法

3÷24

解释下其中的减法和除法:

  1. 减法:由于 440,4+10,所以 −41;因此,242+13

  2. 除法:由于22−11,231,所以 2−13;因此,3÷232−1334

时钟运算

将时钟当做模为12的运算,数字在钟面上循环,12点位置对应0值,顺时针为加法,逆时针为减法。

运算法则

模运算的运算法则与普通运算一致:

加法规则

乘法规则

(a+b)+ca+(b+c)modp

(ab)ca(bc)modp

a+bb+amodp

abbamodp

a(b+c)ab+acmodp

(a+b)cac+bcmodp

a+0a0+amodp

a1a1amodp

a+(−a)0(−a)+amodp

aa−11a−1amodp

素数模

当模数 n素数时,模运算的集合 {0,1,2,...,n1} 不仅是一个,还能构成一个有限域(Galois域),记作 GF(n)
的关键特性是:

  • 每个非零元素都有乘法逆元:即对任意 a=0,存在 b 使得 ab1modn

  • 运算封闭且可逆:加减乘除(除零外)均合法,适合复杂计算。

多项式插值

唯一多项式

给定平面上的n个点,存在唯一的一个次数不超过(n-1)的多项式经过所有这些点。

三点确定

例如,(1,3), (2,1), (3,2) 可以确定唯一一个二次多项式

唯一性证明

该唯一性可通过反证法证明:

假设存在两个不同的二次多项式f(x)g(x)都经过这三个点,则差值多项式h(x)=f(x)g(x)

  • 是次数≤2的多项式

  • 在x=1,2,3处都有h(x)=0

  • 但非零二次多项式最多有2个根,矛盾!

计算方式

由这些点计算多项式的方式如下:

  1. 基多项式构造

    • 对每个点 (xi,yi),构造基多项式 Li(x),使其满足:

      • Li(xi)=1(在当前点取值为1)。

      • Li(xj)=0(在其他点 xj (j=i) 取值为0)。

    • 具体构造方法:

      • 分子:将 (xxj) 对所有 j=i 的项连乘,形成 (xx1)(xx2)(排除 xxi)。

      • 分母:将分子中的 x 替换为 xi 后的计算结果,确保标准化(即 Li(xi)=1)。

      • 表达式:Li(x)=j=i(xixj)j=i(xxj)

  2. 合成多项式

    • 将每个基多项式 Li(x) 乘以对应的 yi,并将所有结果相加:f(x)=i=1nyiLi(x)

    • 由于每个 Li(x)xi 处为1、其他点处为0,合成的 f(x) 必通过所有给定点 (xi,yi)

最终结果:通过上述步骤构造的 f(x) 是次数不超过 n1 的唯一多项式,精确穿过所有 n 个数据点。

二次多项式 计算方式

基多项式构造

  • 对点(1,3):L1(x)=(12)(13)(x2)(x3)=2x25x+6

  • 对点(2,1):L2(x)=(21)(23)(x1)(x3)=−1x24x+3

  • 对点(3,2):L3(x)=(31)(32)(x1)(x2)=2x23x+2

合成多项式

f(x)=3L1(x)+1L2(x)+2L3(x)=23x2213x+8

纠删过程

纠删方法

运用模运算与拉格朗日插值法,可以解决本文开头提出的数据丢失场景。

编码过程

设原始数据为[2,4,3,1],在模5系统中操作:

  1. 构造3次多项式满足:

    f(0)=2, f(1)=4, f(2)=3, f(3)=1
  2. 通过插值法解得:

    f(x) = 2x³ + 2 mod 5
  3. 计算冗余数据:

    f(4)=0, f(5)=2
解码过程

假设传输过程中丢失了第1和第6个数据,接收端获得:

[?, 4, 3, 1, 0, ?]

通过已知的4个点(1,4), (2,3), (3,1), (4,0)重构唯一的原多项式,再计算:

f(0)=2 → 恢复第一个丢失数据
模运算必要性

需要用模运算的原因是:

  1. 数值可控:所有运算结果在0-4之间

  2. 除法可行素数模保证每个非零元都有逆元

  3. 避免溢出:有限域运算适合计算机处理

讨论
随记