二叉树在数据是随机的时候,生成的树深度较低,左右两树可能也比较平衡,但是如果是有顺序的插入,那么二叉树深度就较高,要么子树全部在左边,要么子树全部在右边,那么由此引出最优二叉树,哈夫曼树

1、哈夫曼树含义

在权为w1,w2,,,,,,wn的n个叶子结点的所有二叉树中,带权路径长度wpl最小的二叉树称为赫夫曼树或最优二叉树。

什么是权??

“权”就是“权重”的意思,可以理解为出现的频率,也可以理解为所占的比例,“权”在一定程度上提现了数据的分布规律。

1.1 路径和长度

在一颗树中,从一个节点往下可到达的孩子和孙子节点之间的通路称为路径。路径中分支的项目称为路径长度,若根节点的层数为1,则从根节点到L层节点的路径长度就是L-1。

例:如上图,100和80的路径长度是1,50和30的路径长度是2,20和10的路径长度就是3

1.2 节点的权及带权路径长度

若将树中节点赋给一个有着某种含义的数值,则这个数值称为该节点的权。

节点的带权路径长度为:从根节点到该节点之间的路径长度与该节点的权的乘积

例:节点20的路径长度是3,它的带权路径长度=路径长度*权=3*20=60;

1.3 树的带权长度

树的带权路径长度规定为所有叶子节点的带权路径长度之和,记为wpl;

例子:树的wpl=1*100+2*80+3*20+3*10=350;

以下图片带权树取值最小的就是最优二叉树也就是哈夫曼树 。

2、哈夫曼树构造方式

1. 有4个节点A,B,C,D,权值分别为7,5,2,4,试构造以此4个节点为叶子节点的二叉树。

步骤一:先找到权值里最小的两个节点,那么就是2,4,将2,4构建树节点中,需要满足左小右大原则

步骤二:然后把2,4节点的和6添加到2和4的父节点上

步骤三:然后节点就剩下7,5,6,再从7,5,6里找到两个最小的数,就是5,6,继续将5和6的和当父节点

步骤四:然后节点就剩下7,11,那就将最后两个数字构建一下,和为18成为父节点。

步骤五:将节点找到合在一起,最终生成了一个哈夫曼树

原则:哈夫曼树中权越大的叶子离根越近

3.哈夫曼编码

含义:哈夫曼(Huffman)编码属于码词长度可变的编码类,是哈夫曼在1952年提出的一种编码方法,即从下到上的编码方法。同其他码词长度可变的编码一样,可区别的不同码词的生成是基于不同符号出现的不同概率。

哈夫曼树的应用很广,哈夫曼编码就是其在电讯通信中的应用之一。广泛地用于数据文件压缩的十分有效的编码方法。其压缩率通常在20%~90%之间。在电讯通信业务中,通常用二进制编码来表示字母或其他字符,并用这样的编码来表示字符序列。

例:如果需传送的电文为 ‘ABACCDA’,它只用到四种字符,用两位二进制编码便可分辨。假设 A, B, C, D 的编码分别为 00, 01,10, 11,则上述电文便为 ‘00010010101100’(共 14 位),译码员按两位进行分组译码,便可恢复原来的电文。

数据的最小冗余编码问题(错误示例)

在上例中,若假设 A, B, C, D 的编码分别为 0,00,1,01,则电文 ‘ABACCDA’ 便为 ‘000011010’(共 9 位),但此编码存在多义性:可译为: ‘BBCCDA’、‘ABACCDA’、‘AAAACCACA’ 等。

在树上标 “0” 和 “1” 规则是:左0 右1

每个字符的二进制编码为(从根节点 数到对应的叶子节点,路径上的值拼接起来就是叶子节点字母的应该的编码)

A:0        B:10       C:110     D:110

假如报文方发送11010111,接收方翻译为:“CBD”

哈夫曼树以及哈夫曼编码相关推荐

  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. Redis之七种武器
  2. 微服务框架-Spring Cloud简介(一)
  3. java socket 一边关闭_java socket - 半关闭
  4. ASP.NET页面之间传值Application(5)
  5. 计算机硬件软件维护报告,计算机软硬件及络维护技能实习报告.doc
  6. KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!
  7. 超5400亿!教育部公布2022年部门预算
  8. Java中运行Shell for Android
  9. C ++ 指针 | 指针的操作_2
  10. matlab 中一些对数组或矩阵的处理
  11. 限时删!字节总监总结一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)...
  12. JDK使用VolatileImage可以有效改进刷屏
  13. 解决9341系列LCD,使用杜邦线等连接线,造成白屏问题
  14. 互联网未来十年发展趋势
  15. 《UnityAPI.Transform变换》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Transform+eulerAngles+LookAt+立钻哥哥++OK++)
  16. 人工神经网络—神经元的数学模型
  17. luci开发小插件_luci框架-LUA的一个web框架使用
  18. 【手游项目4】过滤特殊字符,游戏账号名,玩家游戏名,数据库特殊字符检测
  19. ODOO实现微信单点登入
  20. 【技巧】windows剪切板

热门文章

  1. DAOS 源码解析之 daos_pool
  2. 【7 kyu】Descending Order
  3. TBC声望 恢复萨满 炼金 宏 附魔300-375
  4. 阿里巴巴java规范
  5. 在iOS微信里如何自动播放
  6. 安徽工程大学计算机学院转专业,2021年安徽工程大学大一新生转专业及入学考试相关规定...
  7. js 流文件下载zip压缩包
  8. 怎么删除网络共享多余的计算机,win10系统删除网络共享中多余的计算机的图文教程...
  9. 微信H5 用户调整微信字体 导致使用rem的页面错乱
  10. 数字图像处理-高反差保留算法