一、问题引入
在计算机中需要用0-1字符串作为代码来表示信息,为了正确解码,必须要求任何字符的代码不能作为其他字符代码的前缀,这样的码称为二元前缀码。二元前缀码的存储通常采用二叉树结构,令每个字符作为树叶,对应这个字符的前缀码看作根到这片树叶的一条路径,规定每个结点通向左儿子的边记作0,通向右儿子的边记作1。
不同学符在信息中出现的频率不同.设 C ={x1,x2,...,xn}是 n 个字符的集合,xi的频率是 f(xi), i =1,2,..., n ,那么存储一个字符所使用的二进制位数的平均值是:
其中 是表示字符
的二进制位数,也就是
的码长。由于一个二元前缀码对应了一棵二叉树,码字就是这棵树的树叶,表示码字的二进制 数就是从根到这片树叶的路径长度,即树叶的深度.那么存储一个字符的平均二进制位数恰好就是这棵树在给定频率下的平均深度,也称为这棵树的权.图中每个码学的频率分别是:
00000:5%,00001:5%,0001:10%,001:15%,
01:25%,100:10%,101:10%,11:20%
存储这个码的一个字符平均需要的二进制位数是:
不难看出,对应于同一组频率可以构造出不同的二叉树这些二叉树所对应的前缀码的平均字符占用的位数也不一样,占用位数越少的压缩效率越高,压缩效率最高、即每个码字平均使用二进制位数最少的前缀码,称为最优二元前缓码,根据上面的分析不难看出,在给定频率下,对应于最优二元前缀码的二叉树是平均深度最小&