码-综述(码的定义、性质及Singleton Bound的证明)
我的研究方向是通信编码理论,上层建筑是分布式存储中的编码方案,所以对于各类码要非常的熟悉,接下来会将一些手记记录下来。
(前置知识:有限域)
(研究的细分领域:信道编码 -》 差错控制编码 -》 重复码/纠删码(都是通过在系统中增加冗余节点实现) -》 分组码/卷积码 -》 分组码 -》 线性分组码 )
2024-2-27晚上补充:用斜体字
1. 重复码
(来自西南交通大学刘义博士的博士毕业论文的绪论部分)
优点:修复速率快、更新复杂度低、易于实现,修复带宽最小(修复带宽(repair bandwidth)定义为分布式存储系统在修复失效节点的过程中从其它未失效节点(也称为幸存节点)上下载的数据总量)
缺点:绝大部份数据都是冗余数据,存储开销过大、存储资源过度浪费
具体说明:一个可任意容忍 r 个节点失效的重复码,其要求原始数据额外产生r个副本,所以将存储原始数据的r+1个副本以保证系统可任意容许r个节点失效,当发生节点失效时,只需要将任意一个与失效节点存储相同副本的节点上的数据拷贝到替代节点即可。
举例:对于一个采用三副本的分布式存储系统(HDFS,GFS),假设原始数据大小为10 PB,那么系统所需要存储的数据总量为30PB,其中有20PB的数据为冗余数据。
2. 纠删码
对于一个采用(n,k=n−r)纠删码的分布式存储系统,源文件被分为k份,然后经过编码产生n个数据块并被分别存储在n个存储节点上,其中每个节点存储的数据量为1/k倍文件大小。在任意容忍r个节点失效的情况下,纠删码的数据存储总量和冗余数据量最小可分别达到原始文件的(1+r/k)倍和(r/k)倍。
优点:相同冗余数据量的情况下,纠删码能容忍失效节点的个数要远大于重复码。
缺点:节点修复带宽却远大于采用重复码的分布式存储系统。
缺点的具体阐述:对于一个采用(n,k=n−r)纠删码的分布式存储系统,当一个节点失效时,其需要先从任意k个幸存节点上下载全部数据,然后重构原始文件,最后再由原始文件重新生成存储在失效节点上的数据,这样的修复方式会产生巨大的修复带宽,即为整个原始文件大小,而采用重复码的分布式存储系统的修复带宽为(1/k)倍原始文件大小。
综上所述,构造存储开销小、修复带宽小、帮助节点个数可自适应选取以及能同时修复多个失效节点等优良性能的纠删码具有重要研究意义。
3.码的部分
3.1 码的定义
Fq是一个有限域,Fqn是Fq上的长为n的向量空间,Fqn的一个非空向量子集C称为一个码,C中任意元素称为码字。码C中都是长度为n的向量,码C的码长是n,|C|=K(码字个数是K,在有限域中,绝对值符号代表其域中的元素个数)。
(在学习了有限域的相关知识以后,看这段话感觉非常好理解,但是当时一窍不通,很难理解)
3.2 码字之间的距离:汉明距离(小写粗体代表向量)
a=(a1,a2,...,an),b=(b1,b2,...,bn) ∈ C (向量a,向量b,是C中的两个码字)
他们的汉明距离定义为:dH(a , b)= # {1 ≤ i ≤ n | ai ≠ bi} (ai与bi各自分量不同的个数) (满足3条性质:非负性,对称性,三角不等式性)
3.3 定义:汉明重量
a ∈ Fqn,Wt(a) = dH(a , 0) = # {1 ≤ i ≤ n | ai ≠ 0} (非零分量的个数)
举例:F34,取a=(1,2,1,0),Wt(a) = 3 (因为F的下标是3,意味着其向量的取值为0,1,2)
3.4 码C的最小距
d(C) = min dH(x , y) (x ≠ y) (x , y ∈C)
举例:F34
{ α1= (1,2,1,0) } C = { α2= (0,0,1,0) } { α3= (1,0,0,2) }
dH(α1 , α2)= 2 ,dH(α1 , α3)= 3 ,dH(α2 , α3)= 3
∴d(C) = 2
3.5 码C的参数:(n,k,d),性质
(1)可检查 ≤d - 1位错误
(2)可纠正 ≤⌊(d-1)/2⌋位错误
具体说明:
(1)码字a ∈ C , a出错小于(d-1)位变为a'
则有dH(a , a')≤ d-1,同时一定有∀b∈C且b≠a,dH(a , b)≥ d (这块要好好的想一想,因为C内dmin=d,现在存在比dmin还小的码距,说明a'一定发生了错误!!)
说明a'不是码字,即a'发生错误。
(2)可以通过“三角不等式”性质证明
3.6 Singleton Bound
C ∈ Fqn ,C的参数为(n,K,d),将C中的码字写成矩阵形式:
a11 a12 a13 ... a1n
a21 a22 a23 ... a2n
a31 a32 a33 ... a3n
( ... ... ... ... ... )
... ... ... ... ...
aK1 aK2 aK3 ... aKn
删去最后(d-1)列,即删去最后(d-1)个分量,得到新的长为(n-d+1)的向量 两两不同!
证明(反证法):
假设a发生错误变为a',b发生错误变为b' (他们都删去d-1个分量) 若dH(a' , b')= 0 (他们两者的汉明距离一样,即他们两两相同,与定义中的“两两不同”相反) 这时,可以得到dH(a , b)≤ d-1,与dH(a , b)≥ d 相矛盾!!! (为什么这么说呢,前半句:他们都加上d-1个分量后,理论上最多也就只有d-1个不同的元素,即最小码距=d-1;后半句:最小码距的定义dmin,a与b的码距一定 ≥ C的最小码距)
证毕。
删去最后(d-1)列后得到的新的码字集合定义为C',|C'| = K,C' ∈ Fqn-d+1
(这里补充一下为什么K≤qn-d+1 ,因为有限域Fqn-d+1是一个全集(我是这么理解的),而码字集合C只是全集当中的一部分,所以K ≤qn-d+1)
∴ K ≤qn-d+1,这个界称为Singleton Bound
Singleton Bound 的说的是,对于C∈Fqn的[n,k]线性码,C的最小汉明距离dmin≤n-d+1,满足Singleton Bound的码叫MDS码(极大距离可分码)