【贪心法】最优前缀码(Huffman哈夫曼算法)

一、问题引入

在计算机中需要用0-1字符串作为代码来表示信息,为了正确解码,必须要求任何字符的代码不能作为其他字符代码的前缀,这样的码称为二元前缀码。二元前缀码的存储通常采用二叉树结构,令每个字符作为树叶,对应这个字符的前缀码看作根到这片树叶的一条路径,规定每个结点通向左儿子的边记作0,通向右儿子的边记作1。

不同学符在信息中出现的频率不同.设 C ={x1,x2,...,xn}是 n 个字符的集合,xi的频率是 f(xi), i =1,2,..., n ,那么存储一个字符所使用的二进制位数的平均值是:

B=\sum_{i=1}^{n}{f(x_{i})}{d(x_{i})}

其中 d(x_{i})是表示字符 x_{i}的二进制位数,也就是x_{i}的码长。由于一个二元前缀码对应了一棵二叉树,码字就是这棵树的树叶,表示码字的二进制 数就是从根到这片树叶的路径长度,即树叶的深度.那么存储一个字符的平均二进制位数恰好就是这棵树在给定频率下的平均深度,也称为这棵树的权.图中每个码学的频率分别是:

00000:5%,00001:5%,0001:10%,001:15%,

01:25%,100:10%,101:10%,11:20%

存储这个码的一个字符平均需要的二进制位数是:

B=[(5+5)\times 5+10\times 4+(15+10+10)\times 3+(25+20)\times 2]\div100=0.5+0.4+1.05+0.9=2.85

 不难看出,对应于同一组频率可以构造出不同的二叉树这些二叉树所对应的前缀码的平均字符占用的位数也不一样,占用位数越少的压缩效率越高,压缩效率最高、即每个码字平均使用二进制位数最少的前缀码,称为最优二元前缓码,根据上面的分析不难看出,在给定频率下,对应于最优二元前缀码的二叉树是平均深度最小&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值