浅谈数据结构——赫夫曼数
来源:互联网 发布:linux 没有service 编辑:程序博客网 时间:2024/06/15 04:01
出险原因
这篇博客就介绍一下最基本的压缩编码方法——赫夫曼编码
原理
赫夫曼编码的原理是赫夫曼树,这里我们先介绍赫夫曼树。
从数中一个节点到另一个节点之间的分支构成两个节点之间的路径,路径上的分支数目就是路径长度。
树的路径长度就是从树根节点到每一节点的路径长度之和。
例如:
二叉树a中根节点到节点D的路径长度为4.
二叉树的路径长度为:1+1+2+2+3+3+4+4=20.
节点的带权路径长度为从该节点到树根之间的路径长度与节点上权的乘积。
同理,树的带权路径长度为树中所有叶子节点的带全路径长度之和。
其中带权路径长度QPL最小的二叉树称为赫夫曼树(最优二叉树)。
二叉树a的WPL=5*1+15*2+40*3+30*4+10*4=315
构造哈夫曼树
- 先把有权值的叶子节点按照从小到大的顺序排列成一个有序序列:
- 取头两个最小权值的结点作为一个新节点N1的两个子节点,注意相对较小的是左孩子:
- 将15代替5和10,依旧按照从小到大的顺序排列:
- 重复步骤2,直到排列完成为止。
步骤总结:
- 根据节点的权值按从小到大排列节点的顺序。
- 合并两个最小的权值。
- 新合成的节点代替两个最小的权值进行按从小到大排列节点。
- 重复2-3直到排列完成。
赫夫曼编码
赫夫曼编码为了解决当年远距离通信的数据传输最优化问题。
比如传输队列为:
BADC-ADFE-ED
使用而二进制表示:
这样传输的真正编码为:
001-000-011-010-000-100-101-100-100-011
若要设置长度不等的编码,则必须保证任一字符的编码不是另一个字符的编码的前缀,这种编码称做前缀编码。
0 0
- 浅谈数据结构——赫夫曼数
- 浅谈数据结构——堆
- 浅谈数据结构—堆(heap)
- 浅谈数据结构——如何解决hash冲突
- 浅谈数据结构——二叉查找树实现原理分析
- 浅谈数据结构
- 浅谈数据结构
- 数据结构浅谈
- 数据结构之—线性表之—双向链表之—浅谈双循环链表
- 数据结构之—线性表之—浅谈单链表有头结点和无头节点
- 浅谈算法和数据结构
- 浅谈数据结构vector
- 浅谈算法和数据结构
- 浅谈数据结构:哈希表
- 浅谈数据结构-树状数组
- 浅谈数据结构--红黑树
- 浅谈数据结构和算法
- JAVA数据结构Map浅谈!!
- 1分钟实现“延迟消息”功能(58沈剑)
- Maven-关于在环境变量中配置两个maven的问题
- 单例模式汇总
- <a>超文本标签
- Vim高级用户3大技巧
- 浅谈数据结构——赫夫曼数
- Php开发ZendStudio常用快捷键大全
- <img>图像标签
- OrmLite框架 —— OrmLite 复杂条件查询
- 串口实现
- App架构(读书笔记)
- C++ Primer 第5版--练习10.18
- 测试同样需要注重安全测试
- linux笔记之消息队列