(英文版请参考 https://github.com/julianShi/public/issues/17)
用一个实例展开讨论。如下,用3-3矩阵储存9个bit数据
1 1 0
0 0 0
0 0 0
假如一个bit出错了,比如某个bit反转了。
1 1 0
0 1 0
0 0 0
那么可以通过这个bit的行列信息定位这个它。为此,我们为矩阵增加一行一列
1 1 0 0
0 0 0 0
0 0 0 0
1 1 0
其中,第四行和第四列是parity bits。0代表所属行/列数字和是偶数,0代表所属行/列数字和是奇数。如果出现错误,parity bits会发生相应改变
1 1 0 0
0 1 0 1
0 0 0 0
1 0 0
在这个例子中,第二行和第二列对应的parity bit就改变了。因此可以定位错误出在第二行第二列那个bit.
分析
把案例拓展到m行n列,空间复杂度是O(m+n)
进一步分析
根据二进制的讨论,这个问题的空间复杂度可以进一步优化。如果矩阵各维度尺寸固定在2,把矩阵扩展到k维度,那么可以用 O(2*k) 额外空间来校验 O(2^k) bits。这其实也是