1.哈夫曼树的构造

给定N个权值为{w1,w2,w3,…,wN}的结点(比如可以根据一个字符串中字母出现的频率计算权值)。构造哈夫曼树的算法流程如下:
1.将这N个结点分别作为N棵仅含一个结点的二叉树,构成森林F;
2.构造一个新结点,并从F中选取两棵根结点权值最小的树作为新结点的左、右子树(左边的权<右边的权),并将新结点的权值置为左、右子树上根结点的权值之和;
3.从F中删除刚才选取的两棵树,同时将新生成的树放入F;
4.重复步骤2和3,直到F中只剩下一棵树为止。

2.哈夫曼编码

首先先了解前缀编码这个概念:如果没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码。如0、101和100就是前缀编码,对于前缀编码的解码很简单,如00101100可唯一地被解码成0、0、101、100.
哈夫曼编码是前缀编码。

构造哈夫曼编码首先要构造出一棵哈夫曼树。首先将每个出现的字符当作一个独立的结点,其权值为它出现的频度,然后构造出对应的哈夫曼树。显然,所有的字符结点都是叶子结点
看一个例子:

树中所有叶子结点的带权路径长度(WPL)定义如下:
WPL = ∑ 叶子结点的权值 × 结点到根结点的分支个数
因此,上面这棵哈夫曼树的WPL为:
WPL=1 * 45+3 * (12+13+16)+4 * (5+9)=224

总结一下:利用哈夫曼树可以设计出总长度最短的二进制前缀编码!

复习——哈夫曼树及哈夫曼编码相关推荐

  1. 霍夫曼树及霍夫曼编码的C语言实现,霍夫曼树及霍夫曼编码的C语言实现

    从周五开始学习霍夫曼树,一直到今天终于完成,期间遇到了各类各样的棘手的问题,经过一遍遍在纸上分析每一步的具体状态得以解决.如今对学习霍夫曼树的过程加以记录web 首先介绍霍夫曼树数组 霍夫曼树(Huf ...

  2. 蓝桥哈夫曼树C语言,实验四 哈夫曼树及哈夫曼编码

    实验目的## 掌握哈夫曼树的概念.哈夫曼编码及其应用. 掌握生成哈夫曼树的算法. 会用哈夫曼树对传输报文进行编码. 掌握二叉树的二叉链表存储方式及相应操作的实现. ##实验内容## 用哈夫曼编码进行通 ...

  3. python哈夫曼树_python霍夫曼树

    class Node(): data=0 left=None right=None father=None def __init__(self,data,left,right): self.data= ...

  4. 一文看懂哈夫曼树与哈夫曼编码

    转自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html 在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUF ...

  5. 树:哈夫曼树和哈夫曼编码的详细介绍以及代码实现

    闲扯前言 哈夫曼编码的代码实现对于初学数据结构的同学可能会有些困难,没有必要灰心,其实没啥,学习就犹如攀登一座又一座的山峰,每当我们攻克一个难点后,回首来看,也不过如此嘛.我们要做的就是不断的去攀越学 ...

  6. 听说你还不懂哈夫曼树和哈夫曼编码

    基本概念 哈夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,在实际中有广泛的用途. 基本概念 路径:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. 路径长度:路径上的分 ...

  7. 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  8. 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码

    第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...

  9. 【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

    1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R ...

  10. 【数据结构】-哈夫曼树以及哈夫曼编码

    哈夫曼树的几个定义 哈夫曼树又叫最优二叉树:特点是带权路径最短 带权路径长度:该结点到根结点的路径长度乘以该结点的权值. 树的带权路径长度(WPL):所有叶子结点到根结点的带全路径长度之和. 最优二叉 ...

最新文章

  1. linux 编译mqtt静态库_编译MQTT C++ Client
  2. ES6中的class是如何实现的?(附Babel编译的ES5代码详解)
  3. NetBeans 时事通讯(刊号 # 109 - Jul 17, 2010)
  4. php manager如何安装目录,宝塔面板安装OneManager-php – Onedrive的列表索引和管理程序...
  5. 【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
  6. 关于python2和python3除法的区别
  7. ubuntu下快速安装adb,fastboot的方法。
  8. 让你的对象跑出内存,写入到磁盘或者进行网络传输,一文掌握Java对象序列化
  9. Swans and ducks, Piešťany, Slovakia
  10. matlab双立方插值法_双三次插值(Bicubic interpolation)缩放图片
  11. 自动机器学习工具全景图:精选22种框架,解放炼丹师
  12. FPGA——1位全加器的实现
  13. 工作经验分享:为什么我们要写Unti Test
  14. 改进YOLOv5系列:首发结合 RepLKNet 构建 最新 RepLKDeXt 结构|CVPR2022 超大卷积核, 越大越暴力,大到31x31, 涨点高效
  15. 什么是抽象方法 java_java抽象类和抽象方法
  16. nodejs+vue基于决策树算法的大学生就业预测系统
  17. 邀请函|欢迎参加2019云创大数据实验平台金融类/电子商务类/数学统计类院校各省总代理招募大会!...
  18. play-framework的安装配置(OS X和windows版)
  19. 类库(.NET Standard)和类库(.NET Core)区别及选择
  20. 计算机组成原理复杂机实验总结,计算机组成原理复杂模型机设计_课程设计报告.doc...

热门文章

  1. GBASE 8A v953报错集锦56--Hadoop 加载失败问题
  2. 咖啡兔流程执行逻辑分析
  3. 数字油田中的虚拟光纤
  4. EdgeInsets.symmetric()
  5. 【C】例9.7有n个结构体变量,内含学生学号、姓名和3门课程的成绩。要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)
  6. java中long=后面为什么还要加个L
  7. 【LTE】Qualcomm LTE Packets log 分析(一)LTE Access Stratum Log Analysis 1_PSS 2_RACH
  8. 乘风破浪、厚积薄发国产服务器软件: LinWin Http Server
  9. 51nod 1213 二维曼哈顿距离最小生成树
  10. 危化品化工企业双重预防机制五有标准是什么包括哪些内容