Reed-Solomon 编码的解码算法
Reed-Solomon 编码
R
S
(
D
,
k
)
RS(D,k)
RS(D,k) 定义为,对于消息
m
0
,
⋯
,
m
k
−
1
m_0,\cdots, m_{k-1}
m0,⋯,mk−1,构造由这些消息作为系数构成的度小于
k
k
k 的多项式
F
(
X
)
=
∑
i
=
0
k
−
1
m
i
⋅
X
i
F(X) = \sum_{i=0}^{k-1} m_i \cdot X^i
F(X)=i=0∑k−1mi⋅Xi
对每个
a
0
,
⋯
,
a
n
−
1
∈
D
a_0, \cdots, a_{n-1} \in D
a0,⋯,an−1∈D,计算
c
i
=
F
(
a
i
)
c_i = F(a_i)
ci=F(ai)。
m
0
,
⋯
,
m
k
−
1
m_0, \cdots, m_{k-1}
m0,⋯,mk−1 的 Reed-Solomon 码字为
c
0
,
⋯
,
c
n
−
1
c_0, \cdots, c_{n-1}
c0,⋯,cn−1。
定义 R S [ F , D , k ] RS[\mathbb{F}, D, k] RS[F,D,k] 为所有可能的 R S ( D , k ) RS(D,k) RS(D,k) 码字的集合。
解码算法已知 D D D,并收到可能存在错误的 b 0 , ⋯ , b n − 1 b_0, \cdots, b_{n-1} b0,⋯,bn−1。希望解码出正确的度小于 k k k 的多项式 F ( X ) ∈ R S [ F , D , k ] F(X) \in RS[\mathbb{F}, D, k] F(X)∈RS[F,D,k]。
Berlekamp-Welch 算法 Unique decoding
该算法可以对存在至多 e = ⌊ n − k 2 ⌋ e = \lfloor \frac{n-k}{2}\rfloor e=⌊2n−k⌋ 个位置有错的 Reed-Solomon 编码纠错。
定义度小于等于 e e e 的多项式 E ( X ) E(X) E(X) 满足,对任意 i i i,若 b i ≠ F ( a i ) b_i \neq F(a_i) bi=F(ai),则 E ( a i ) = 0 E(a_i) = 0 E(ai)=0。额外定义 E ( X ) E(X) E(X) 的最高次项系数为 1。
由
E
(
X
)
E(X)
E(X) 的定义,显然有
b
i
E
(
a
i
)
=
E
(
a
i
)
F
(
a
i
)
b_i E(a_i) = E(a_i) F(a_i)
biE(ai)=E(ai)F(ai)
定义
Q
(
X
)
=
E
(
X
)
⋅
F
(
X
)
Q(X) = E(X) \cdot F(X)
Q(X)=E(X)⋅F(X) 为度小于
k
+
e
k + e
k+e 的多项式,则有
b
i
E
(
a
i
)
=
Q
(
a
i
)
b_i E(a_i) = Q(a_i)
biE(ai)=Q(ai)
显然,如果 b 0 , ⋯ , b n − 1 b_0, \cdots, b_{n-1} b0,⋯,bn−1 中的错误位置不超过 e e e 个,则存在满足上述等式的度小于 e e e 的多项式 E ( X ) E(X) E(X) 和度小于 k + e k+e k+e 的多项式 Q ( X ) Q(X) Q(X), Q ( X ) / E ( X ) Q(X) / E(X) Q(X)/E(X) 即为目标的 F ( X ) F(X) F(X)。
可以证明,对任何度小于
e
e
e 的非零多项式
E
1
(
X
)
,
E
2
(
X
)
E_1(X), E_2(X)
E1(X),E2(X) 和度小于
k
+
e
k + e
k+e 的多项式
Q
1
(
X
)
,
Q
2
(
X
)
Q_1(X), Q_2(X)
Q1(X),Q2(X),若有
b
i
E
1
(
a
i
)
=
Q
1
(
a
i
)
b
i
E
2
(
a
i
)
=
Q
2
(
a
i
)
b_i E_1(a_i) = Q_1(a_i) \quad b_iE_2(a_i) = Q_2(a_i)
biE1(ai)=Q1(ai)biE2(ai)=Q2(ai)
均成立,则一定有
Q 1 ( X ) E 1 ( X ) = Q 2 ( X ) E 2 ( X ) \frac{Q_1(X)}{E_1(X)} = \frac{Q_2(X)}{E_2(X)} E1(X)Q1(X)=E2(X)Q2(X)
要证明上述结论,只需证
Q
1
(
x
)
E
2
(
x
)
=
Q
2
(
x
)
E
1
(
x
)
Q_1(x)E_2(x) = Q_2(x)E_1(x)
Q1(x)E2(x)=Q2(x)E1(x) 对任意
x
∈
D
x \in D
x∈D 成立。由于
b
i
E
1
(
a
i
)
Q
2
(
a
i
)
=
b
i
E
2
(
a
i
)
Q
1
(
a
i
)
b_i E_1(a_i) Q_2(a_i) = b_i E_2(a_i) Q_1(a_i)
biE1(ai)Q2(ai)=biE2(ai)Q1(ai)
对任意 i i i,若 b i = 0 b_i = 0 bi=0,则 Q 1 ( a i ) = Q 2 ( a i ) = 0 Q_1(a_i) = Q_2(a_i) = 0 Q1(ai)=Q2(ai)=0;若 b i ≠ 0 b_i \neq 0 bi=0,则有 E 1 ( a i ) Q 2 ( a i ) = E 2 ( a i ) Q 1 ( a i ) E_1(a_i) Q_2(a_i) = E_2(a_i) Q_1(a_i) E1(ai)Q2(ai)=E2(ai)Q1(ai)。
因此,只需求一组多项式
E
(
X
)
,
Q
(
X
)
E(X), Q(X)
E(X),Q(X) 满足
b
i
E
(
a
i
)
=
Q
(
a
i
)
b_i E(a_i) = Q(a_i)
biE(ai)=Q(ai)
由于多项式
E
(
X
)
E(X)
E(X) 的最高此项为 1,可以构造关于
e
0
,
⋯
,
e
e
−
1
,
q
0
,
⋯
,
q
k
+
e
−
1
e_0,\cdots, e_{e-1}, q_0,\cdots, q_{k+e-1}
e0,⋯,ee−1,q0,⋯,qk+e−1 的
n
n
n 个
(
k
+
2
e
)
(k + 2e)
(k+2e) 元线性方程组
b
i
(
e
0
+
e
1
a
i
+
e
2
a
i
2
+
⋯
+
e
e
−
1
a
i
e
−
1
+
a
i
e
)
=
q
0
+
q
1
a
i
+
q
2
a
i
2
+
⋯
+
q
k
+
e
−
1
a
i
k
+
e
−
1
b_i(e_0 + e_1 a_i + e_2 a_i^2 + \cdots + e_{e-1} a_i^{e-1} + a_i^e) = q_0 + q_1 a_i + q_2a_i^2+ \cdots + q_{k + e - 1}a_i^{k + e - 1}
bi(e0+e1ai+e2ai2+⋯+ee−1aie−1+aie)=q0+q1ai+q2ai2+⋯+qk+e−1aik+e−1
解方程组即可得到 E ( X ) E(X) E(X) 和 Q ( X ) Q(X) Q(X)。
Berlekamp-Welch 算法 List decoding
该算法可以对至少 t = 2 n k + O ( 1 ) t = 2 \sqrt{nk} + O(1) t=2nk+O(1) 个位置正确的 Reed-Solomon 码进行纠错。
算法流程
首先找到一个非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 deg X ( Q ) ≤ ℓ \deg_X(Q) \le \ell degX(Q)≤ℓ, deg Y ( Q ) ≤ n ℓ \deg_Y(Q) \le \frac{n}{\ell} degY(Q)≤ℓn。且对任意 i ∈ [ n ] i \in [n] i∈[n],有 Q ( a i , b i ) = 0 Q(a_i, b_i) = 0 Q(ai,bi)=0。
输出所有正确位置至少为 t t t 个的多项式 P ( X ) P(X) P(X) 满足 Y − P ( X ) Y-P(X) Y−P(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)。
选取的 ℓ \ell ℓ 应满足 t > ℓ + n k ℓ t > \ell + \frac{nk}{\ell} t>ℓ+ℓnk。最优的 ℓ \ell ℓ 应当为 n k \sqrt{nk} nk。此时 t > 2 n k t > 2\sqrt{nk} t>2nk。
算法分析
第一步中,由于变量数为 ( ℓ + 1 ) ( n / ℓ + 1 ) (\ell + 1)(n/\ell+1) (ℓ+1)(n/ℓ+1),大于约束的数量 n n n。因此可以保证一定有非零解。
第二步中,需要证明如果度小于 k k k 的多项式 P ( X ) P(X) P(X) 和 b ⃗ \vec{b} b 有至少 t t t 个点相等,则 Y − P ( X ) Y-P(X) Y−P(X) 整除 Q ( X , Y ) Q(X, Y) Q(X,Y)。
对每个满足要求的 P ( X ) P(X) P(X),定义 R ( X ) = Q ( X , P ( X ) ) R(X) = Q(X, P(X)) R(X)=Q(X,P(X))。我们只需证明 R ( X ) ≡ 0 R(X) \equiv 0 R(X)≡0。
首先分析, deg ( R ) ≤ deg X ( Q ) + deg ( P ) ⋅ deg Y ( Q ) ≤ ℓ + n k ℓ < t \deg(R) \le \deg_X(Q) + \deg(P) \cdot \deg_Y(Q) \le \ell + \frac{nk}{\ell} < t deg(R)≤degX(Q)+deg(P)⋅degY(Q)≤ℓ+ℓnk<t。
若 P ( a i ) = b i P(a_i) = b_i P(ai)=bi,则 R ( a i ) = Q ( a i , b i ) = 0 R(a_i) = Q(a_i, b_i) = 0 R(ai)=Q(ai,bi)=0。由于 deg ( R ) \deg(R) deg(R) 已经在至少 t t t 个位置等于 0 0 0,因此有 R ( X ) ≡ 0 R(X) \equiv 0 R(X)≡0。
Sudan 算法
Sudan 算法能对至少有 t = 2 n k + O ( 1 ) t = \sqrt{2nk} + O(1) t=2nk+O(1) 个位置相同的 Reed-Solomon 码进行纠错。
带权度
定义单项式 X i Y j X^iY^j XiYj 的 ( 1 , k ) (1,k) (1,k)-权度为 i + k j i + kj i+kj。定义多项式 Q ( X , Y ) Q(X, Y) Q(X,Y) 的 ( 1 , k ) (1, k) (1,k)-权度为是其所有单项式的 ( 1 , k ) (1,k) (1,k)-权度最高的那个。
设
ℓ
=
⌊
D
k
⌋
\ell = \lfloor \frac{D}{k} \rfloor
ℓ=⌊kD⌋,
(
1
,
k
)
(1,k)
(1,k)-权度不超过
D
D
D 的多项式
Q
(
X
,
Y
)
Q(X, Y)
Q(X,Y) 可以写做
Q
(
X
,
Y
)
=
∑
j
=
0
ℓ
∑
i
=
0
D
−
k
j
q
i
,
j
X
i
Y
j
Q(X, Y) = \sum_{j=0}^{\ell} \sum_{i=0}^{D-kj} q_{i,j}X^iY^j
Q(X,Y)=j=0∑ℓi=0∑D−kjqi,jXiYj
算法流程
首先找到一个非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 ( 1 − k ) (1-k) (1−k)-权度不超过 D = ⌈ 2 k n ⌉ D = \lceil \sqrt{2kn} \rceil D=⌈2kn⌉。且对任意 i ∈ [ n ] i \in [n] i∈[n],有 Q ( a i , b i ) = 0 Q(a_i, b_i) = 0 Q(ai,bi)=0。
输出所有相同位置至少为 t t t 的多项式 P ( X ) P(X) P(X),满足 Y − P ( X ) Y-P(X) Y−P(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)。
算法分析
在第一步,需要保证 Q ( X , Y ) Q(X, Y) Q(X,Y) 的系数个数大于 n n n,才能保证一定有非零解。
Q ( X , Y ) Q(X, Y) Q(X,Y) 的系数个数为
∑ j = 0 ℓ ∑ i = 0 D − k j 1 = ∑ j = 0 ℓ ( D − k j + 1 ) = ∑ j = 0 ℓ ( D + 1 ) − k ∑ j = 0 ℓ j = ( D + 1 ) ( ℓ + 1 ) − k ℓ ( ℓ + 1 ) 2 = ℓ + 1 2 ( 2 D + 2 − k ℓ ) ≥ ( ℓ + 1 2 ) ( D + 2 ) ≥ D ( D + 2 ) 2 k > D 2 2 k ≥ 2 k n 2 k = n \begin{align*} & \sum_{j=0}^{\ell} \sum_{i=0}^{D-kj} 1 \\ = & \sum_{j=0}^{\ell}(D - kj + 1) \\ = & \sum_{j=0}^{\ell}(D+1) - k \sum_{j=0}^{\ell}j \\ = & (D + 1)(\ell + 1) - \frac{k \ell(\ell + 1)}{2} \\ = & \frac{\ell+1}{2}(2D + 2 - k \ell) \\ \ge & \left(\frac{\ell+1}{2} \right)(D + 2) \\ \ge & \frac{D(D+2)}{2k} \\ \gt & \frac{D^2}{2k} \ge \frac{2kn}{2k} = n \end{align*} ====≥≥>j=0∑ℓi=0∑D−kj1j=0∑ℓ(D−kj+1)j=0∑ℓ(D+1)−kj=0∑ℓj(D+1)(ℓ+1)−2kℓ(ℓ+1)2ℓ+1(2D+2−kℓ)(2ℓ+1)(D+2)2kD(D+2)2kD2≥2k2kn=n
由于 Q ( X , P ( X ) ) Q(X, P(X)) Q(X,P(X)) 的度不超过 D D D,因此当 t > D t > D t>D 时,一定有 Y − P ( X ) Y-P(X) Y−P(X) 整除 Q ( X , Y ) Q(X, Y) Q(X,Y)。
Guruswami-Sudan 算法
Guruswami-Sudan 算法能对至少 n k + O ( 1 ) \sqrt{nk} + O(1) nk+O(1) 个位置正确的 Reed-Solomon 码进行纠错。
二元多项式的多重根
定义 ( 0 , 0 ) (0,0) (0,0) 是 Q ( X , Y ) Q(X, Y) Q(X,Y) 的 r r r 重零点,当且仅当 Q ( X , Y ) Q(X, Y) Q(X,Y) 不存在度小于 r r r 的单项式。
定义 ( α , β ) (\alpha, \beta) (α,β) 是 Q ( X , Y ) Q(X, Y) Q(X,Y) 的 r r r 重零点,当且仅当 Q α , β ( X , Y ) = Q ( X + α , Y + β ) Q_{\alpha, \beta}(X, Y) = Q(X + \alpha, Y + \beta) Qα,β(X,Y)=Q(X+α,Y+β) 在 ( 0 , 0 ) (0, 0) (0,0) 有 r r r 个根。
如果 ( α , β ) (\alpha, \beta) (α,β) 是 Q ( X , Y ) Q(X, Y) Q(X,Y) 的 r r r 重零点,则任意 P ( X ) P(X) P(X) 满足 P ( α ) = β P(\alpha) = \beta P(α)=β,有 ( X − α ) r (X - \alpha)^r (X−α)r 整除 Q ( X , P ( X ) ) Q(X, P(X)) Q(X,P(X))。
算法流程
取 r = 2 k n r = 2kn r=2kn。计算非零多项式 Q ( X , Y ) Q(X, Y) Q(X,Y),满足 ( 1 , k ) (1, k) (1,k)-权度不超过 D = ⌈ k n r ( r − 1 ) ⌉ D = \lceil \sqrt{knr(r-1)} \rceil D=⌈knr(r−1)⌉,且对任意 i ∈ [ n ] i \in [n] i∈[n], ( a i , b i ) (a_i, b_i) (ai,bi) 是 Q ( X , Y ) Q(X, Y) Q(X,Y) 的 r r r 重零点。
求所有正确位置至少为 t t t 的多项式 P ( X ) P(X) P(X),满足 Y − P ( X ) Y-P(X) Y−P(X) 能整除 Q ( X , Y ) Q(X, Y) Q(X,Y)。
算法分析
Q ( X , Y ) Q(X, Y) Q(X,Y) 在 ( a i , b i ) (a_i, b_i) (ai,bi) 有 r r r 重根,表示对任意 i + j < r i+j<r i+j<r, ( X − a i ) i ( Y − b i ) j (X-a_i)^i(Y-b_i)^j (X−ai)i(Y−bi)j 的系数为 0 0 0,因此共有 ( r + 1 2 ) \tbinom{r+1}{2} (2r+1) 条约束。变量数大于 D ( D + 2 ) 2 k > D 2 2 k ≥ k n r ( r − 1 ) 2 k = n ( r + 1 2 ) \frac{D(D+2)}{2k} > \frac{D^2}{2k} \ge \frac{knr(r-1)}{2k} = n \tbinom{r+1}{2} 2kD(D+2)>2kD2≥2kknr(r−1)=n(2r+1),因此保证一定存在非零解。
由于 R ( X ) = Q ( X , P ( X ) ) R(X) = Q(X, P(X)) R(X)=Q(X,P(X)) 的度不超过 D D D。由于有 t t t 个 r r r 重零点能推出 R ( X ) ≡ 0 R(X) \equiv 0 R(X)≡0,因此要求 t r > D tr > D tr>D。 t t t 取 ⌈ k n ( 1 − 1 r ) ⌉ \left \lceil \sqrt{kn(1-\frac{1}{r})} \right \rceil ⌈kn(1−r1)⌉ 时满足要求。
当 r = 2 k n r = 2kn r=2kn 时, t = ⌈ k n − 1 2 ⌉ = ⌈ k n ⌉ t = \left \lceil \sqrt{kn - \frac{1}{2}} \right \rceil = \left \lceil \sqrt{kn} \right \rceil t=⌈kn−21⌉=⌈kn⌉。