labview 霍夫曼树_Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)
一、什么是哈夫曼树?
让我们先举一个例子。
判定树:
在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:
if(score<60)
cout<
else if(score<70)
cout<
else if(score<80)
cout<
else if(score<90)
cout<
else
cout<
若考虑上述程序所耗费的时间,就会发现该程序的缺陷。在实际中,学生成绩在五个等级上的分布是不均匀的。当学生百分制成绩的录入量很大时,上述判定过程需要反复调用,此时程序的执行效率将成为一个严重问题。
但在实际应用中,往往各个分数段的分布并不是均匀的。下面就是在一次考试中某门课程的各分数段的分布情况:
下面我们就利用哈夫曼树寻找一棵最佳判定树,即总的比较次数最少的判定树。
第一种构造方式:
第二种构造方式:
这两种方式,显然后者的判定过程的效率要比前者高。在也没有别地判定过程比第二种方式的效率更高。
哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。
二、基本概念
1、路径: 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。
2、路径长度:路径上的分枝数目称作路径长度。
3、树的路径长度:从树根到每一个结点的路径长度之和。
4、结点的带权路径长度:在一棵树中,如果其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值之积称为该结点的带权路径长度(weighted path length)
5、权值
权值就是定义的路径上面的值。可以这样理解为节点间的距离。通常指字符对应的二进制编码出现的概率。至于霍夫曼树中的权值可以理解为:权值大表明出现概率大!
一个结点的权值实际上就是这个结点子树在整个树中所占的比例.
abcd四个叶子结点的权值为7,5,2,4. 这个7,5,2,4是根据实际情况得到的,比如说从一段文本中统计出abcd四个字母出现的次数分别为7,5,2,4. 说a结点的权值为7,意思是说a结点在系统中占有7这个份量.实际上也可以化为百分比来表示,但反而麻烦,实际上是一样的.
6、树的带权路径长度:如果树中每个叶子上都带有一个权值,则把树中所有叶子的带权路径长度之和称为树的带 权路径长度。
三、哈夫曼树的构造
1,将所有左,右子树都为空的作为根节点。
2,在森林中选出两棵根节点的权值最小的树作为一棵新树的左,右子树,且置新树的附加根节点的权值为其左,右子树上根节点的权值之和。注意,左子树的权值应小于右子树的权值。
3,从森林中删除这两棵树,同时把新树加入到森林中。
4,重复2,3步骤,直到森林中只有一棵树为止,此树便是哈夫曼树。
简易的理解就是,假如我有A,B,C,D,E五个字符,出现的频率(即权值)分别为5,4,3,2,1,那么我们第一步先取两个最小权值作为左右子树构造一个新树,即取1,2构成新树,其结点为1+2=3,如图:
虚线为新生成的结点,第二步再把新生成的权值为3的结点放到剩下的集合中,所以集合变成{5,4,3,3},再根据第二步,取最小的两个权值构成新树,如图:
再依次建立哈夫曼树,如下图:
其中各个权值替换对应的字符即为下图:
所以各字符对应的编码为:A->11,B->10,C->00,D->011,E->010
霍夫曼编码是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合。
四、哈夫曼编码
对于给定的字符集D={d1,d2,...,dn}及其频率分布F={w1,w2,...,wn},用d1,d2,...,dn作为叶结点,w1,w2,...,wn作为结点的权,利用哈夫曼算法构造一棵最优二叉树,将树中每个分支结点的左分支标上"0";右分支标上"1",把从根到每个叶子的路径符号("0"或"1")连接起来,作为该叶子的编码。
labview 霍夫曼树_Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)相关推荐
- 数据结构与算法之Huffman tree(赫夫曼树 / 霍夫曼树 / 哈夫曼树 / 最优二叉树)
目录 赫夫曼树概述 定义 构造赫夫曼树步骤 代码实现 赫夫曼树概述 HuffmanTree因为翻译不同所以有其他的名字:赫夫曼树.霍夫曼树.哈夫曼树 赫夫曼树又称最优二叉树,是一种带权路径长度最短的二 ...
- 霍夫曼树:霍夫曼编码(Huffman Tree:Huffman Coding)
一.简介 霍夫曼树常处理符号编写工作.根据整组数据中符号出现的频率高低,决定如何给符号编码.如果符号出现的频率越高,则给符号的码越短,相反符号的号码越长. 相关术语 路径:从书中一个节点到另一个节点之 ...
- 哈夫曼树(Huffman Tree),与哈夫曼编码
目录 一.哈夫曼树 1.什么是哈夫曼树? 2.哈夫曼树关键字说明 3.用代码实现哈夫曼树思路分析 4.代码实现 二.哈夫曼编码 1.哈夫曼编码基本介绍 2.原理剖析 3.代码实现 一.哈夫曼树 1.什 ...
- 算法学习之最优二叉树(赫夫曼树)
概念 给定n个权值作为n个叶子节点,构造一颗二叉树,若该数的代全路径长度(wpl)达到最小,称这样的的二叉树为最优二叉树,也成霍夫曼树 霍夫曼树是带权路径长度最短的树,权值较大的节点离根较近 路径和路 ...
- 简述最优二叉树(赫夫曼树)
什么是哈夫曼树: 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权 ...
- 哈/赫夫曼树(最优二叉树)
一.哈/赫夫曼树的基本定义 (1)路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度:路径上的分支数目. (3)树的路径长度:从树根到每一个结点的路径长度之和.(完全 ...
- 霍夫曼树(最优二叉树)的实现
文章目录 一.相关概念 1.节点的路径及路径长度 2.节点的带权路径长度 3.树的带权路径长度 4.霍夫曼树 二.构建步骤与图解 1.构建步骤 2.图解 三.代码实现 1.创建节点类: 2.创建霍夫曼 ...
- 6.6.1最优二叉树(赫夫曼树)
首先我们来看一个伪代码.这个是代表成绩的等级. 然后我们知道,每一次高考,学生的成绩分布应该接近某个比例,现在我们假如分别规律如下: 为此可以作出下面的这个树. 我们发现,概率分布主要是在70-79, ...
- 数据结构C#版笔记--啥夫曼树(Huffman Tree)与啥夫曼编码(Huffman Encoding)
哈夫曼树Huffman tree 又称最优完全二叉树,切入正题之前,先看几个定义 1.路径 Path 简单点讲,路径就是从一个指定节点走到另一个指定节点所经过的分支,比如下图中的红色分支(A-> ...
- 哈夫曼树(Huffman Tree)
定义 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数).树的路 ...
最新文章
- 数据结构源码笔记(C语言):二叉树遍历
- 类与类之间关系的表示方式
- 使用WebRTC和WebVR进行VR视频通话
- 面向全球用户的Teams app之Culture计量单位和禁忌篇
- 工业交换机那么贵,为什么那么多人都在用?
- Oracle存储过程单步调试方法
- kmp算法 php,漫画KMP算法-程序员小灰
- 【Java 多线程】多线程带来的的风险-线程安全、多线程五个经典案例
- 微信模板消息47001错误
- android AsyncTask 只能在线程池里单个运行的问题
- C++ set简介及简单应用
- apicloud常用方法
- Kali最新2020.1版本之U盘启动加密与持久化存储制作流程
- 记录一个报错问题 关于调用win32com打开文档
- 中科院读芯术python答案_Python调用中科院NLPIR(ICTCLAS2015)详解 刘超(lch614730@163.com)...
- ios 高德挪动地图获取经纬度_IOS 地图移动中心点获取
- 渝粤题库 陕西师范大学 《危机管理》作业
- C语言中常量后缀,u或U,l或L,f或F问题
- 弹性盒子 -- flex
- PiXYZ Studio教程
热门文章
- 微信小程序 内容评论-回复评论-回复回复的实现
- Python每天一个小程序——字典翻转输出和《沉默的羔羊》之最多单词
- 中国地产商寻找下一个春天 1
- Git命令使用出现Cannot update paths and switch to branch xxx at the same time解决方法
- GraphSAGE+FM+Transformer强强联手:评微信的GraphTR模型
- PHP资源汇总-内容包括模板、框架、数据库、安全等方面的库和工具
- 弹性力学,塑性力学,流变学,连续介质力学,断裂力学,流体力学基本定义及关系
- 20省“十四五”5G发展规划全文发布!(限时下载)
- CDH集成ES MasterNotDiscoveredException问题解决
- 【wordpress】wordpress自己制作主题看这一篇就够了/常用函数/注意事项