概念
层数:叶子节点为待编码的数据,根为第0层.
编码长度:第LLL层数据编码后的长度为LLL.
节点概率:若节点为叶子节点,则概率为叶子所编码数据的频率fif_ifi.或者一种不太严谨的方式,叶子节点的概率为所编码数据的概率pip_ipi.若节点为非叶子节点,概率为两个子节点的概率之和.
定理
定理1: 在哈夫曼树的构造过程中,高层节点的概率不高于低层节点的概率
定理2: 哈夫曼树根节点的概率为1
定理3: 若某个节点概率为ppp,长度为LLL,那么这个节点的概率满足
L≤lg1p+1L\le \lg\frac{1}{p}+1L≤lgp1+1
或
p≤(12)L−1p\le (\frac{1}{2})^{L-1}p≤(21)L−1
例如,频率超过0.5的数据编码长度不会超过1,频率超过0.25的数据编码长度不会超过2等
定理3的证明:
使用反证法.若第l层的节点N不满足定理2,即
pl>(12)l−1p_l>(\frac{1}{2})^{l-1}pl>(21)l−1
根据定理1,N的父节点与N父节点的兄弟节点的概率不会小于(12)l−1(\frac{1}{2})^{l-1}(21)l−1,即N的爷爷节点概率不会小于2⋅(12)l−12\cdot (\frac{1}{2})^{l-1}2⋅(21)l−1.利用数学归纳法易得,N第j层的祖先节点(j<l)满足关系
pj>2l−j−1⋅(12)l−1=(12)jp_j>2^{l-j-1}\cdot (\frac{1}{2})^{l-1}= (\frac{1}{2})^{j}pj>2l−j−1⋅(21)l−1=(21)j
这个式子表面第0层的概率p0>(12)0=1p_0> (\frac{1}{2})^{0}=1p0>(21)0=1,与定理2矛盾.因此定理3总成立.
最大编码长度
哈夫曼编码后数据的长度计算方式为,对每一个数据出现的频率与数据编码长度求积,这些积的和即为编码长度.若第i个数据出现的概率为pip_ipi,长度为LiL_iLi,则编码长度为
L=∑ipi⋅LiL=\sum_i p_i\cdot L_iL=i∑pi⋅Li
根据定理3,哈夫曼编码后的数据长度不会超过
∑ipi(lg1pi+1)=∑ipilg1pi+∑ipi=∑ipilg1pi+1\sum_i p_i(\lg\frac{1}{p_i}+1)=\sum_i p_i\lg\frac{1}{p_i}+\sum_i p_i=\sum_i p_i\lg\frac{1}{p_i}+1i∑pi(lgpi1+1)=i∑pilgpi1+i∑pi=i∑pilgpi1+1
单位为bit.注意到第一项是所谓的信息熵.若pip_ipi全部都为1/21/21/2的幂次(即pi=1/2k,k∈Np_i=1/2^k,k\in Npi=1/2k,k∈N),则哈夫曼编码后的长度为∑ipilg1pi\sum_i p_i\lg\frac{1}{p_i}∑ipilgpi1
哈夫曼树编码原理
1499

被折叠的 条评论
为什么被折叠?



