霍夫曼树和霍夫曼编码原理
一、哈夫曼树的概念和定义
什么是哈夫曼树?
让我们先举一个例子。
判定树:
- if(score<60)
- cout<<"Bad"<<endl;
- else if(score<70)
- cout<<"Pass"<<endl
- else if(score<80)
- cout<<"General"<<endl;
- else if(score<90)
- cout<<"Good"<<endl;
- else
- cout<<"Very good!"<<endl;
if(score<60)cout<<"Bad"<<endl;else if(score<70)cout<<"Pass"<<endlelse if(score<80)cout<<"General"<<endl;else if(score<90)cout<<"Good"<<endl;elsecout<<"Very good!"<<endl;
但在实际应用中,往往各个分数段的分布并不是均匀的。下面就是在一次考试中某门课程的各分数段的分布情况:
定义哈夫曼树之前先说明几个与哈夫曼树有关的概念:
路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。
路径长度:路径上的分枝数目称作路径长度。
树的路径长度:从树根到每一个结点的路径长度之和。
结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值
之积称为该结点的带权路径长度(weighted path length)
什么是权值?( From 百度百科 )
计算机领域中(数据结构)
权值就是定义的路径上面的值。可以这样理解为节点间的距离。通常指字符对应的二进制编码出现的概率。
至于霍夫曼树中的权值可以理解为:权值大表明出现概率大!
一个结点的权值实际上就是这个结点子树在整个树中所占的比例.
abcd四个叶子结点的权值为7,5,2,4. 这个7,5,2,4是根据实际情况得到的,比如说从一段文本中统计出abcd四个字母出现的次数分别为7,5,2,4. 说a结点的权值为7,意思是说a结点在系统中占有7这个份量.实际上也可以化为百分比来表示,但反而麻烦,实际上是一样的.
树的带权路径长度:如果树中每个叶子上都带有一个权值,则把树中所有叶子的带权路径长度之和称为树的带
权路径长度。
设某二叉树有n个带权值的叶子结点,则该二叉树的带权路径长度记为:
公式中,Wk为第k个叶子结点的权值;Lk为该结点的路径长度。
示例:
二、哈夫曼树的构造
三、哈夫曼树的在编码中的应用
霍夫曼树和霍夫曼编码原理相关推荐
- python哈夫曼树_python霍夫曼树
class Node(): data=0 left=None right=None father=None def __init__(self,data,left,right): self.data= ...
- 霍夫曼树(赫夫曼树、哈夫曼树)
霍夫曼树:给定n个权值做为n个叶子节点,若该树的带权路径长度达到最小,这棵树为最优二叉树,也称赫夫曼树. 霍夫曼树中的几个概念 路径和路径长度 一棵树中,一个节点往下可以达到的孩子或孙子节点之间的通路 ...
- 哈夫曼树(霍夫曼树)-详解
哈夫曼树(霍夫曼树)-详解 哈夫曼树(霍夫曼树)-详解 何为权值?我们看下百度百科的解释. 何为路径? 何为路径长度? 何为树的路径长度? 何为结点的带权路径长度? 何为树的带权路径长度(WPL)? ...
- 创建霍夫曼树,霍夫曼编码以及使用霍夫曼编码压缩文件
那么,什么是霍夫曼树(赫夫曼树)呢? 给定n个权值(权值就是每个节点里面存放的数据,但是根据业务需求不同,存放的数据类型有些差别)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样 ...
- 霍夫曼树及霍夫曼编码的C语言实现,霍夫曼树及霍夫曼编码的C语言实现
从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各类各样的棘手的问题,经过一遍遍在纸上分析每一步的具体状态得以解决.如今对学习霍夫曼树的过程加以记录web 首先介绍霍夫曼树数组 霍夫曼树(Huf ...
- Huffman霍夫曼树,霍夫曼编码
霍夫曼树基本概念: 路径:从一个结点往下到孩子或孙子结点之间的同理 路径长度:如结点1到结点7的路径长度=2 结点的权:将结点的某一属性值作为结点的权 带权路径长度:从根节点到该结点*该结点的权:如结 ...
- 霍夫曼树与霍夫曼编码
霍夫曼树以及哈夫曼编码 一.什么是哈夫曼树与哈夫曼编码 编码是什么 答: 在ASCII 编码中 'a' = 97 = ( 01100001 ) 2 (01100001)_2 (01100001)2 ...
- 霍夫曼树和霍夫曼编码以及霍夫曼编码的应用
文章目录 霍夫曼树介绍 1.1霍夫曼树的定义 1.2霍夫曼树的几个概念 1.3构建霍夫曼树的过程 1.4代码实现霍夫曼树 霍夫曼编码介绍 什么是霍夫曼编码 通信领域的应用 字符串压缩 1.构造霍夫曼树 ...
- 霍夫曼树以及霍夫曼编码(动态数组实现方式)
霍夫曼编码是用于数据压缩存储的.根据的原理是:任一个字符编码绝对不是另一个字符编码的前缀,并且出现次数最多的字符,所用编码的位数最小.以此来达到数据压缩的目的. 霍夫曼树有两种实现方式:一种是基于链表 ...
- 一文看懂哈夫曼树与哈夫曼编码
转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html 在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUF ...
最新文章
- ElasticSearch性能优化策略【转】
- Apache ServiceComb Pack 微服务分布式数据最终一致性解决方案
- 海量数据随机抽样问题(蓄水池问题)
- java 简单类继承
- vim配置python开发环境_GitHub - TTWShell/legolas-vim: Vim配置,为python、go开发者打造的IDE。...
- 产品设计:APP个人信息保护指引
- JAVA类与对象(一)----基础概念理解
- linux 加密文件,如何运用OpenSSL 对文件进行加密和解密
- android定位坑简书,android webview 定位问题
- 打标工具labelme或者labelimg遇到图片闪退的完美解决方案
- 手机连接adb操作步骤
- 大二狗卸任社团职位以及对专业发展方向的思考与总结
- IDEA 2018.3.6 修改背景图片
- NLM6XX系列无线无源采发仪的工作模式
- charles对iOS手机的https进行抓包(图文教程)
- 微信小程序连接mysql
- 拆分单元格快速复制内容
- 牛客-判断一个链表是否为回文结构
- 关于.9图失效以及.9图不可以错过的细节点
- Windows7 Ubuntu 双系统安装卸载工具备份