必威体育Betway必威体育官网
当前位置:首页 > IT技术

【数据结构】哈夫曼树及哈夫曼编码

时间:2019-06-29 19:42:16来源:IT技术作者:seo实验室小编阅读:82次「手机版」
 

哈夫曼树

哈夫曼树

给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

树节点间的边相关的数叫做权。

图示

从树中的一个节点到另一个节点之间的分支构成两个点之间的路径,路径上的分支数目称作路径长度。

图中二叉树a中,跟节点到D的路径长度就是4,b中根节点到D的路径长度为2。

树的路径长度就是从树根到每一个节点的路径长度之和。二叉树a的路径长度就为1+1+2+2+3+3+4+4=20。二叉树b的树路径长度就为1+2+3+3+2+1+2+2=16。

如果考虑带权的节点,节点的带权的路径长度就是从该节点到树根之间的路径长度乘该节点的权。

数的带权路径长度就是所有叶子节点的带权路径长度之和。

带权路径长度(WPL)最小的二叉树称作哈夫曼树。

如何构造哈夫曼树

下面我们以【5、8、4、11、9、13】为例来画出哈夫曼树(数字大小代表权重大小,越大的权重越大)

第一步:按从小到大排序。

【5、8、4、11、9、13】→【4、5、8、9、11、13】

第二步:选最小两个数画出一个树,最小数为4和5。

给定的4、5、8、9、11、13为白色, 红色的9为4+5,与给定的白9无关,新序列为:【红9(含子节点4、5)、8、9、11、13】

图示

之后一直重复第一、第二步:排序然后取两个最小值。实际就是一个递归过程

排序:

图示

取两个最小数8和9:

图示

排序:

图示

取两个最小数9和11:

图示

排序,然后取两个最小数13和17:

图示

取两个最小数20和30:

图示

上例子,摘自百度经验:https://jingyan.baidu.com/article/a501d80c16dfa0ec620f5e70.html

哈夫曼编码

哈夫曼研究这种最优树的目的是为了解决当年远距离通信(主要是电报)的数据传输的最优化问题。

比如我们有一段文字“BADCADFEED”,显然用二进制数字(0和1)表示是很自然的想法。

图示

这样真正传输的数据就是“001000011010000011101100100011”,对方接收时同样按照3位一组解码。如果一篇文章很长,这样的二进制串也非常的可怕。而且事实上,每个字母或者汉子的出现频率是不同的。

假设六个字母的频率为A 27,B 8, C 15, D 15 , E 30, F 5,合起来正好是100%,那就意味着我们完全可以用哈夫曼树来规划它们。

左图为构造哈夫曼树的过程的权值显示。右图为将权值左分支改为0,右分支改为1后的哈夫曼树。

图示

我们对这六个字母用其从树根到叶子所经过的路径的0或1来编码,可以得到下表:

图示

图示

也就是说我们的数据被压缩了,节约了大概17%的存储或传输成本。随着字符的增加和多字符权重的不同,这种压缩会更显出优势来。

接收到哈夫曼编码后应该如何解码呢?

仔细观察上面的赫夫曼编码表中各个字母的编码会发现,不存在容易与1001、1000混淆的10、100等编码。这就说明若要设计长短不等的编码,则必须是任一字符的编码都不是另一个字符的编码的前缀,这种编码称作前缀编码

可仅仅是这样不足以让我们去方便的解码,因此解码时,还是要用到哈夫曼树,即发送方和接收方必须约定好同样的哈夫曼编码规则。

下面是赫夫曼编码的定义:

一般的,设需要编码的字符集为{d1,d2,…,dn},各个字符在电文中出现的次数或频率集合为{w1,w2,…,wn},以d1,d2,…dn作为叶子结点,以w1,w2,…wn作为相应叶子结点的权值来构造一棵赫夫曼树。规定赫夫曼树的左分支代表0,右分支代表1,则从根节点到叶子节点所经过的路径分支组成的0和1的序列便为该结点对应字符的编码,这就是赫夫曼编码

哈夫曼树的应用场景

其实赫夫曼树使用场景还真不少,例如apache负载均衡的按权重请求策略的底层算法、咱们生活中的路由器的路由算法、利用哈夫曼树实现汉字点阵字形的压缩存储

(http://www.cnki.com.cn/Article/CJFDTotal-LYGY200504016.htm)、快速检索信息等等底层优化算法,其实核心就是因为目标带有权重、长度远近这类信息才能构建赫夫曼模型

转载自:https://blog.csdn.net/qq_28602957/article/details/71036402

相关阅读

数据结构--停车场管理

停车场管理【问题描述】设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先

面试中常见的数据结构与算法

第二章排序 2.1 O(n2) 算法 给定一数组,其大小为8个元素,数组内的数据无序。 6 3 5 7 0 4 1 2 冒泡排序:两两比较,将两者较少的升

哈夫曼编码算法--我只想简单点

哈夫曼树 哈夫曼树, 即带权路径最小的树, 权值最小的结点远离根结点, 权值越大的结点越靠近根结点图解图(3)即为哈夫曼树哈夫曼编

读后感 《大话数据结构》

珍惜现在勿忧未来良心自在礼悟: 公恒学思合行悟,尊师重道存感恩。叶见寻根三返一,江河湖海同一体。虚怀若谷良心主,愿行无悔给最苦。

数据结构--停车管理系统

停车管理系统 问题描述 停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时

分享到:

栏目导航

推荐阅读

热门阅读