霍夫曼树和霍夫曼编码
来源:互联网 发布:合金装备5原爆点优化 编辑:程序博客网 时间:2024/06/05 22:42
霍夫曼编码是最基本的压缩编码方法。
1.霍夫曼树
介绍霍夫曼树首先清楚几个概念:路径长度、带权路径长度。
路径长度:从树中一个节点到另一个节点之间的分支结构构成两个节点之间的路径,路径上分支数目称作路径长度。树的路径长度就是从树根到每一结点的路径长度之和。
二叉树a的路径长度为1+1+2+2+3+3+4+4=20,b的路径长度为1+2+3+3+2+1+2+2=16。如果考虑带权的节点,节点的带权路径长度为从该结点到树根之间的路径长度与结点权值的乘积。树的带权路径长度为树中所有叶子节点到树根之间的路径长度之和。带权路径长度WPL(Weighted Path Length of Tree)最小的二叉树称为霍夫曼树。
二叉树a的WPL=5*1+15*2+40*3+30*4+10*4=315
二叉树b的WPL=5*3+15*3+(40+30+10)*2=220
霍夫曼树的构造:
1)先把有权值的叶子节点按照从小到大的顺序排成一个有序序列,即A5,E10,B15,D30,C40
2)取头两个最小权值的节点作为一个新结点N1的两个子节点,相对小的为左孩子A,大的为右孩子E。新结点的权值为两个叶子的权值和15。
3)将N1替换A和E,插入到有序序列中,重新排序,即:N1 15,B15,D30,C40。
3)重复步骤2、3,直到结束。
此时,二叉树的带权路径长度WPL=40*1+30*2+15*3+(5+10)*4=205
2.霍夫曼编码
构造出霍夫曼树之后,霍夫曼编码就非常简单了。将霍夫曼树的左右权值分别改为0和1,就可以得到每个字符的霍夫曼编码。
A的编码为:1000
B的编码为:101
C的编码为:0
D的编码为:11
E的编码为:1001
编码中非0即1,长短不等的话很容易混淆,所以若要设计长短不等的编码,则必须是任一字符的编码都不是另一个字符编码的前缀,这种编码称为前缀编码。霍夫曼即是一种前缀编码。
0 0
- 霍夫曼树和霍夫曼编码
- 霍夫曼树和霍夫曼编码原理
- 霍夫曼编码和熵
- 霍夫曼编码和解码
- 霍夫曼编码介绍和霍夫曼编码的接口与实现
- 霍夫曼树与霍夫曼编码
- 视频编码:帧编码和场编码
- unicode编码和ansi编码
- 软编码 和 硬编码
- 编码字符集和字符集编码
- URL编码和网页编码
- 帧编码和场编码
- 变换编码和预测编码
- 字符编码 - 字符集和编码
- 页面编码和数据库编码
- 硬编码和软编码
- ASCII编码 和 UNICODE编码
- 帧编码和场编码
- 京东电商增值服务模式
- Android自动化测试(UiAutomator)——UiObject
- 后台从cookie中取值
- 数据结构只选择排序、冒泡排序、插入排序
- jstat使用方法
- 霍夫曼树和霍夫曼编码
- Mac平台下boost安装及使用
- 什么时候c++会生成临时变量(2014年9月3日13:47:24)
- JS--03
- 数字图像处理--显著目标检测思路
- HDU 1160 FatMouse's Speed (最长上升子序列+记录路径)
- 动态规划算法求两个字符串的最大公共子串
- work_weipa_如何获取屏幕的宽度
- 分页的一些实现的思想和方法(ThreadLocal+Filter+pager-taglib)