夏农–菲诺–以利亚码
演算法描述
给定一离散随机变数 X ,令 为 X=x 发生之机率。
定义
演算法如下:
- 对每个 X 中的 x,
- 令 Z 为 之二次展开
- 令 x 之编码长度
- 选定 x 之编码, 为 在 Z 之小数点后之第一个最高有效位。
举例
令 X = {A, B, C, D} ,其发生机率分别为 p = {1/3, 1/4, 1/6, 1/4} 。
- 对于 A
- 在二进位中, Z(A) = 0.0010101010...
- L(A) = = 3
- code(A) 为 001
- 对于 B
- 在二进位中, Z(B) = 0.01110101010101...
- L(B) = = 3
- code(B) 为 011
- 对于 C
- 在二进位中, Z(C) = 0.101010101010...
- L(C) = = 4
- code(C) 为 1010
- 对于 D
- 在二进位中, Z(D) = 0.111
- L(D) = = 3
- code(D) 为 111
演算法分析
前缀码
夏农–菲诺–以利亚码之输出为二进位前缀码,因此可被直接解码。
令 bcode(x) 为二进位表示法最左侧加入小数点而成之小数。举例而言, code(C)=1010 ,则 bcode(C) = 0.1010 。 对所有 x ,如果没有任何 y 存在使得
则所有的码可构成前缀码。
此性质可透过比较 F 和 X 之累积分布函数,以图表示出:
由 L 之定义可得
并且由于 code(y) 是由 F(y) 从 L(y) 之后的位元截短而得,故
因此 bcode(y) 必不比 CDF(x) 小。
上图说明了 ,因此前缀码定理成立。
编码长度
此码之平均长度为
。
因随机变数 X 之 熵 H(X) 满足
夏农–菲诺–以利亚码之长度约比代编码资料之熵长约一到二额外位元,故甚少被实用。
参考书目
T. M. Cover and Joy A. Thomas (2006). Elements of information theory (2nd ed.). John Wiley and Sons. pp. 127–128.