哈夫曼树,哈夫曼编码

简介: 哈夫曼树,哈夫曼编码

一、哈夫曼树(最优二叉树)定义:

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。

首先搞清楚基本术语:

1、路径和路径长度

在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。

在哈夫曼树中,只需要关注根节点与叶子节点之间的路径即可。


20200828165902293.png

2、结点的权及带权路径长度

若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。

20200828165916835.png


3、树的带权路径长度

树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL(Weighted Path Length of Tree)。

WPL=14+6=20

二、构建哈夫曼树(考点,也是生成哈夫曼编码的基础)

给定这样的场景:给出5个节点,构建一颗带权路径长度最短的树。这里有一个原则:权值越大,则应该距离根节点越接近。这样可以减小WPL(树的带权路径长度)。

20200828165943929.png


注意:兄弟结点的位置跟权的大小没有关系!左右孩子谁大谁小都可以,上图中的权重2,3 的两个节点位置可以互换,根节点下两颗子树也能左右互换。


相关文章
|
11月前
|
前端开发 JavaScript 搜索推荐
Marp 入门与教程:让你一分钟爱上代码写PPT的乐趣
Marp 是一个基于 Markdown 的开源幻灯片制作工具,可将 Markdown 文档轻松转换为精美幻灯片。支持 VS Code 插件实时预览、命令行工具批量处理、自定义主题等,适用于技术分享、工作汇报和教学等多种场景。相比 LaTeX Beamer,Marp 学习成本低,跨平台支持好,设计现代美观。
|
机器学习/深度学习 人工智能 自然语言处理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理
|
大数据 Linux 数据安全/隐私保护
基于Docker搭建大数据集群(一)Docker环境部署
基于Docker搭建大数据集群(一)Docker环境部署
基于QT实现的拷贝文件以及实时进度条(简易版)
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条 2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。 3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。 4.循环的去读取源文件中的数据,然后写入目标文件
1117 6
|
关系型数据库 MySQL Java
译 | Off-CPU Flame Graphs
译 | Off-CPU Flame Graphs
437 0
|
算法 Python
深度挖掘Python图结构:DFS与BFS遍历的艺术,让复杂问题迎刃而解
【7月更文挑战第11天】在数据结构与算法中,图的遍历如DFS和BFS是解决复杂问题的关键。DFS深入探索直至无路可走,回溯找其他路径,适合找任意解;BFS则逐层扩展,常用于找最短路径。在迷宫问题中,BFS确保找到最短路径,DFS则可能不是最短。Python实现展示了两种方法如何在图(迷宫)中寻找从起点到终点的路径。
206 1
|
存储 JSON NoSQL
【文档数据库】ES和MongoDB的对比
【文档数据库】ES和MongoDB的对比
1081 1
|
SQL 存储 算法
clickhouse SQL优化
clickhouse 是 OLAP 数据库,但其具有独特的索引设计,所以如果拿 MySQL 或者其他 RDB 的优化经验来优化 clickhouse 可能得不到很好的效果,所以特此单独整理一篇文档,用于有 SQL 优化需求的同学,本人接触 clickhouse 时间也不长,难免有不足的地方,如果大家发现错误,还请不吝指正。
83920 3
N..
|
开发框架 Dart 开发工具
搭建Flutter开发环境
搭建Flutter开发环境
N..
287 0
|
Java 测试技术 算法
蓝桥杯-02-蓝桥杯Java组考点与14届真题
蓝桥杯-02-蓝桥杯Java组考点与14届真题