哈夫曼树与哈夫曼编码

哈夫曼树


在实际生活中,要将学生成绩划分为5个等级。而每个分数段的学生占比不同。

分数0~5960-6970~7980~8990~100
等级不及格及格中等良好优秀
代号EDCBA
占比5%15%40%30%10%

如果按照一般的判断方法如下代码,每次都从60开始比较,而大于70分的成绩占比80%,显然不合理。

def scale(score):
	if score < 60:
		result = "E"  # 不及格
	elif score < 70:
		result = "D"  # 及格
	elif score < 80:
		result = "C"  # 中等
	elif score < 90:
		result = "B"  # 良好
	else:
		result = "A"  # 优秀
	return result

在这里插入图片描述
哈夫曼:“从树中一个节点到另外一个节点之间的分支构成两个节点之间的路径,路径上的分支数目称作路径长度。”上图中根节点到B的路径长度为4.此二叉树路径的长度就为:1+1+2+2+3+3+4+4 = 20.WPL = 5x1+15x2+40x3+30x4+10x4=315
带权路径长度WPL最小的二叉树叫哈夫曼树。
生成哈夫曼树步骤:1)想把叶子节点按照从小到大的顺序排列成一个有序序列,E5%,A10%,D15%,B30%,C40%;
2)取前头权值最小的两个作为节点N1的叶子,小的作为左孩子,相对大的为右孩子。
在这里插入图片描述

3)再将N15%与剩下的节点排序,重复第二步。构成哈夫曼树。
在这里插入图片描述

此时,WPL=40x1+30x2+15x3+10x4+5x4=205

哈夫曼编码


设置编码集合为{d1,d2,d3,d4,d5}
由哈夫曼树构成哈夫曼编码如下:
在这里插入图片描述
每个子树的左分支设为0,右分支设为1.
有编码集{0,11,101,1001,1000}
以上为简单的哈夫曼编码示例。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柏常青

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

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

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

打赏作者

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

抵扣说明:

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

余额充值