18. 树(7)

1. 赫夫曼树

  在数据膨胀、信息爆炸的今天,数据压缩的意义不言而喻。谈到数据压缩,就不能不提赫夫曼(Huffman)编码,赫夫曼编码是首个实用的压缩编码方案,即使在今天的许多知名压缩算法里,依然可以见到赫夫曼编码的影子。另外,在数据通信中,用二进制给每个字符进行编码时不得不面对的一个问题是如何使电文总长最短且不产生二义性。根据字符出现频率,利用赫夫曼编码可以构造出一种不等长的二进制,使编码后的电文长度最短,且保证不产生二义性。

1.1 赫夫曼树的一个例子

  介绍赫夫曼编码前,我们必须得介绍赫夫曼树。

有的时候,我们按照上述的情况对学生的成绩情况进行判断并划分所属区间。但是实际上,在每一个区间内的的学生的人数并不是相等的,所以如果需要判断人数最多的 85 (左右)分数的同学,需要进行三次判断,明显是过于麻烦的。

  如果我们把判断流程改为以下,效果可能有明显的改善

1.2 赫夫曼树定义与原理

  我们先把这两棵二叉树简化成叶子结点带权的二叉树(注:树结点间的连线相关的数叫做权,Weight),如下是对上述两种树的处理结果

在这里介绍与之相关的一些定义。结点的路径长度:从根结点到该结点的路径上的连接数;树的路径长度:树中每个叶子结点的路径长度之和;结点带权路径长度:结点的路径长度与结点权值的乘积;树的带权路径长度:WPL(Weighted Path Length)是树中所有叶子结点的带权路径长度之和。

1.3 生成赫夫曼树

  WPL的值越小,说明构造出来的二叉树性能越优。如下图所示,A B C D 四个元素的权值分别是 7 5 2 4。

这里写图片描述

首先选择出现权值最小的两个元素构建一个小树,这个小树的根节点的权值为两个元素权值的和,如下图所示

这里写图片描述

之后再从剩下的元素里选择权值最小的一个,如果它的值比已经建立的树的权值小则放在左侧,否则放在右侧,同样将权值求和作为新的结点的权值,如下图所示

这里写图片描述

之后的操作均如上所示,直至生成一个树

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值