哈夫曼(huffman)树和哈夫曼编码

(一)、哈夫曼树

 哈夫曼树也叫最优二叉树(哈夫曼树)

(二)、问题:什么是哈夫曼树?

 例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80~89分: B,70~79分: C,60~69分: D,<60分: E。
					     if (a < 60){
					        b = 'E';
					    }
					    else if (a < 70) {
					        b = ‘D’;
					    }
					    else if (a<80) {
					        b = ‘C’;
					    }
					    else if (a<90){
					        b = ‘B’;
					    }
					    else {
					      b = ‘A’;
					    }
 判别树:用于描述分类过程的二叉树。
https://images0.cnblogs.com/blog2015/682679/201504/052142271163043.png(图片链接)

如果每次输入量都很大,那么应该考虑程序运行的时间
https://images0.cnblogs.com/blog2015/682679/201504/052145322101163.png(图片链接)

如果学生的总成绩数据有10000条,则5%的数据需 1 次比较,15%的数据需 2 次比较,40%的数据需 3 次比较,40%的数据需 4 次比较,因此 10000 个数据比较的
 次数为:  10000 (5%+2×15%+3×40%+4×40%)=31500次
 https://images0.cnblogs.com/blog2015/682679/201504/052147335854515.png(图片链接)
 
此种形状的二叉树,需要的比较次数是:10000 (3×20%+2×80%)=22000次,显然:两种判别树的效率是不一样的。

(三)、问题:能不能找到一种效率最高的判别树呢?

 那就是哈夫曼树

(四)、回忆树的基本概念和术语

		路径:若树中存在一个结点序列k1,k2,…,kj,使得ki是ki+1的双亲,则称该结点序列是从k1到kj的一条路径。
		路径长度:等于路径上的结点数减1。
		结点的权:在许多应用中,常常将树中的结点赋予一个有意义的数,称为该结点的权。
		结点的带权路径长度:是指该结点到树根之间的路径长度与该结点上权的乘积。

(五)、哈夫曼树的构造(哈夫曼算法)

	1.根据给定的n个权值{w1,w2,…,wn}构成二叉树集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树为空.
	2.在F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左右子树根结点的权值之和.
	3.在F中删除这两棵树,同时将新的二叉树加入F中.
	4.重复2、3,直到F只含有一棵树为止.(得到哈夫曼树)

(六)、关于哈夫曼树的注意点:

1、满二叉树不一定是哈夫曼树  

2、哈夫曼树中权越大的叶子离根越近  (很好理解,WPL最小的二叉树)

3、具有相同带权结点的哈夫曼树不惟一

4、哈夫曼树的结点的度数为 0 或 2, 没有度为 1 的结点。

5、包含 n 个叶子结点的哈夫曼树中共有 2n – 1 个结
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值