知识点:

权值小的节点在权值大的节点左边

左指数根节点上的值,一定要小于右指数根节点上的值

哈夫曼编码和译码都是唯一的

用哈夫曼树进行译码前缀编码:
指的是,任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。
哈夫曼编码是一种前缀码。

译码过程是编码过程的逆过程:

从哈夫曼树的根开始,从左到右把二进制编码的每一位进行判别,

若遇到0,则选择左分支走向下一个结点;

若遇到1,则选择右分支走向下一个结点,直至到达一个树叶结点,便求得相应字符。

题一:

已知在一个信息通信联络中使用了8个字符:a、b、c、d、e、f、g和h,每个字符的使用频度分别为:6、30、8、9、15、24、4和12, 试设计各个字符的哈夫曼编码

解题思路:

(1)试设计各个字符的哈夫曼编码:

我们先看题目中给出的数字,一般把数字小的放在最下面,以及左边

先是4和6组成10

然后再去找次小、最小的数字,然后是8和9,再组成一个二叉树,根得17

在剩下的数字中再找最小、次小的,是12,12和根最小数10组成22

再找最小和次小数字,是15,要要放在12和17中间,因为数字小的在左边,15和17组成32

然后再找最小和次小数字,是24,24与22组成46

现在只剩30未分配了,于是30和32组成62

 这下就一目了然了,于是46和62组成108,这颗哈夫曼树就出来了

(2)请为aabcffh编码

先把数字下对应的字母写到下面

 然后哈夫曼编码怎么编?先把0 1写上,记住,左枝是0,右枝是1

接下来编码 ,由上图可知哈夫曼编码为:

a:0001       b:10       c:1110       d:1111        e:110         f:01          g:0000           h:001

所以aabcffh编码为:0001 0001 10 1110 01 01 001

(3)请翻译以下的编码:

00011111110010010000    ----------------->    adefhg
000100011011100101001    ------------------>    aabcffh

译码在这里面找到的字符串一定是唯一的,比如说在战争年代发的密报

比如人家说的是明天反攻,而你翻译出来的是既可以明天反攻也可以明天撤退,那不出大问题了吗

题二:

假设通信电文使用的字符集为{a,b,c,d,e,f},各字符在电文中出现的频度分别为:

0.34,0.05,0.12,0.23,0.08,0.18,试为这6个字符设计哈夫曼编码。

(1)请画出所构造的哈夫曼树(要求树中左孩子节点的权值小于右孩子节点的权值)

答:解题思路和上一题一样,我们首先第一步先在数字中找最小和次小的

先是0.05和0.08组成0.13

再去找最小和次小数,是0.12和0.13,组成0.25

然后在剩下的数字中找最小和次小的,是0.18和0.23,

接下来就剩下0.34、0.41、0.25未分配了,于是0.34和0.25组成0.59

 然后就剩下0.41和0.59了,又因为0.41比0.59小,所以在0.59左边

(2)分别写出每个字符对应的编码(要求左分支表示字符“0”,右分支表示字符“1”)

a:11           b:1010          c:100          d:01          e:1011          f:00 

哈夫曼树及哈夫曼编码的构造方法相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. C++ 实现哈夫曼树和哈夫曼编码

    C++ 实现哈夫曼树和哈夫曼编码 一.哈夫曼树的定义 二.哈夫曼树的构造算法 三.哈夫曼编码 四.哈夫曼算法实现 1.定义一个结点类 2.定义一个哈夫曼编码类 3.定义一个哈夫曼树类 4.设置初始值 ...

最新文章

  1. 4.Windows下安装ZooKeeper
  2. Github新建分支以处理原仓库提交时detached HEAD的问题
  3. Design Pattern: Singleton 模式
  4. 2019年python就业前景_2019年Python数据挖掘就业前景前瞻
  5. python源码精要(2)-C代码规范
  6. VTK:PolyData之PointsProjectedHull
  7. [回归分析][10]--相关误差的问题
  8. Zookeeper 夺命连环 9 问
  9. linux的网络管理,Linux下的网络管理工具—OpenNMS
  10. python+selenium自动化测试环境搭建步骤(selenium环境搭建)-绝不浪费您的时间
  11. Eclipse的下载Spring Tool Suite(sts)
  12. 我们分析了10000条视频,终于知道了今日头条推荐系统的秘密
  13. 全球及中国菖蒲根提取物行业发展规模及投资方向分析报告2022-2028年
  14. ROS导航调参经验总结(Teb算法)
  15. “手机到底是如何实现定位的?工作原理是什么?”
  16. java常用设计模式11—适配器模式
  17. 『Java』Zip中Excel文件的解析
  18. 趣谈网络协议-第二模块-底层网络知识详解:4陌生的数据中心2CDN和数据中心
  19. 集团审计BI项目的特点
  20. 游戏辅助原理与制作01.扫雷-01基址

热门文章

  1. 众享比特、众享金联荣登2020中国区块链企业百强榜
  2. Windows文件管理软件分享
  3. CSS3实现3D球体运动
  4. 分析CF活动网站请求总结
  5. cesium实现车辆转运模拟
  6. 电路-戴维南定理(一个独立电压源和一个线性电阻相串联等效),最大功率传输条件
  7. 王者荣耀服务器账号怎样注销,王者荣耀账号怎么注销
  8. python网页抓包_python爬虫入门01:教你在 Chrome 浏览器轻松抓包
  9. CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes
  10. 解决微信内置浏览器缓存问题的三个方法