Huffman Tree (哈夫曼树学习)

  • 时间:
  • 浏览:1
  • 来源:大发幸运飞艇APP下载_大发幸运飞艇APP官方

emmm... 相当于可是这么 个东西。好了,笔记写完了,继续学习...

下面是个最简单且最直观的案例,通过实际案例都可不能否更清晰的表示 WPL 和哈夫曼树。

这里产生另4个多想法:如果把 80~90 的判断拿到最前面,不就都可不能否减少大每项成绩的计算路径几时?

第一种生活便都需要使用哈夫曼树来实现,如果给定:

哈夫曼树的特点:

通过后边的案例,就都可不能否得出结论,哈夫曼树都可不能否根据节点的查找频率来构造更有效的搜索树,是 WPL 最小的树。

首先介绍一下哪几个是 WPL,其定义是树的所有叶结点的带权路径长度之和,称为树的带权路径长度,公式为 WPL = W1 L1 + W2 L2 + W3 L3 + ... + Wn Ln。

计算以下 WPL = 2 3 + 2 4 + 2 5 + 3 1 + 3 * 2 = 33

百分制的成绩转再加五分制的成绩,伪代码如下:

这么 难题来了,绝大多数成绩处于 80~90 分,都都可不能否了少数成绩处于 80 分以下及 90 分以上,那判断的次数是有的是怪怪的多呢?其中一种生活"绝大多数"和"少数"可是另4个多权值的概念了。

通过一种生活规则,都需要生成一棵判定树,如下:

关于怎么能否选泽另4个多权值最小的二叉树,都需要使用最小堆实现,复杂度是 O(N log N)。

n 个叶子节点的哈夫曼树,总节点数为 2n-1

修改后的判定树应该是原本的

比如成绩分布如下:

构成哈夫曼树:

给定一段蕴含 80 个字符的字符串,由 {a,b,c,d,e,f}构成,且每个字符经常出现次数不同,会有如下几种存储办法。

其判断次数等于:WPL = 0.40 2 + 0.80 2 + 0.10 2 + 0.15 3 + 0.05 * 3 = 2.2

根据判定树都需要看出:对于 80 分以下的分数,只需要一次就都可不能否给出结果;对于 80~70 分的成绩,需要判断 2 次给出结果;对于 70~80 的成绩则需要判断 3 次,依次类推。

哈夫曼编码用于数据存储中做压缩,如下案例:

哈夫曼树,又称最优二叉树,是一棵带权值路径长度(WPL,Weighted Path Length of Tree)最短的树,权值较大的节点离根更近。

长度为:1 18 + 4 4 + 16 2 + 1 5 + 1 5 + 10 3 = 106 字符。

哈夫曼树的构造都需要理解为将权值最小的两棵二叉树合并,一种生活树的权值等于 2 个子树的和。

比如权值:{1,2,3,4,5},都需要得出:

这么 判断次数等于: WPL = 0.05 1 + 0.15 2 + 0.80 3 + 0.40 4 + 0.10 * 5 = 3.35

什么都有有有:a:0; b:1101; c:10; d:1800; e:1801; f:111 。