哈夫曼树和哈夫曼编码

原文参照:http://blog.csdn.net/bruce_6/article/details/38656413

1.基本概念

节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度

树的路径长度:从树的 根节点到树中每一结点的 路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。
结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数。
结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。
树的带权路径长度(Weighted Path Length of Tree: WPL):定义为树中所有 叶子结点的带权路径长度之和

最优二叉树是带权路径长度最短的二叉树
WPL=7*1+5*2+2*3+4*3=35

2.构造哈夫曼树的思路
1)给定n个权值分别为{w1,w2,w3,……}的二叉树{T1,T2,T3,……},其中每棵二叉树只有一个权值为wi 的根节点,其左右子树都为空;
2)从森林中取出两棵根节点的权值最小的二叉树,作为一棵新的二叉树的左右子树,且令新的二叉树的根节点的权值为其左右子树的权值和;
3)从F中删除被选中的那两棵子树,并且把构成的新的二叉树加到F森林中
4)重复2 ,3 操作,直到森林只含有一棵二叉树为止,此时得到的这棵二叉树就是哈夫曼树


3.哈夫曼编码
对一串报文abcdabcaba”进行编码,可以先统计出a、b、c、d4个字符,出现次数分别为4、3、2、1
将a、b、c、d以出现次数为权值构造哈夫曼树
从哈夫曼树根节点开始,对左子树分配代码“0”,对右子树分配“1”,一直到达叶子节点。
如图:
a、b、c、d的编码分别为0、10、110、111
报文“abcdabcaba”转换为对应的二进制码就是0101101110101100100,这就是哈夫曼编码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值