问题引入:

 

大话数据结构009 哈夫曼树

我们有一个根据分数划分类型的问题,如果按部就班的这么干,在某些情况下会出出现效率问题。

大话数据结构009 哈夫曼树

超过70分的有80%,这些人需要做三次没用的判断。

 

然而改进后,我们可以提高效率:

大话数据结构009 哈夫曼树

 

大话数据结构009 哈夫曼树

从某个节点到另外一个节点的连线树就是路径长度,如果带有权值,那就是权值与路径长度的乘积。

二叉树a的路径总长度:1+1+2+2+3+3+4+4 = 20

二叉树b的路径总长度:1+1+2+2+2+2+3+3 = 16

二叉树a的WPL:1*5+2*15+3*40+4*30+10*4 = 315

二叉树b的WPL:3*5+15*3+40*2+30*2+10*2 = 220

 

哈夫曼树的构造

大话数据结构009 哈夫曼树

1. 将所有带权值的叶子结点按权值从小到大依次排序。

A5  E10  B15  D30  C40

2. 取前两个元素构成一个父节点。

大话数据结构009 哈夫曼树

N1=A+E = 15

3. 把A和E在列表中去掉,用N1代替,先排序,再次按照步骤2进行操作。

N1=15, B = 15, D = 30,C = 40

大话数据结构009 哈夫曼树

N2 = N1+B = 30

现在整体是:

大话数据结构009 哈夫曼树

4. 重复以上操作

大话数据结构009 哈夫曼树

大话数据结构009 哈夫曼树

 

哈夫曼编码

 

实际上,将哈夫曼树表达的数据转换成0和1表示的方法就是哈夫曼编码。

大话数据结构009 哈夫曼树

将左子树设为0,右子树设为1,就是我们得到的哈夫曼编码。

大话数据结构009 哈夫曼树

 

相关文章:

  • 2021-10-29
  • 2021-05-07
  • 2021-09-11
  • 2021-07-04
  • 2021-08-26
  • 2021-11-14
猜你喜欢
  • 2021-12-26
  • 2021-08-21
  • 2021-05-30
  • 2021-11-12
  • 2021-09-29
  • 2021-08-08
相关资源
相似解决方案