当前位置:网站首页>数据机构-哈夫曼树
数据机构-哈夫曼树
2022-08-09 00:02:00 【彪彪_】
什么是哈夫曼树?
先来看哈夫曼树的定义:
哈夫曼树(Huffman Tree)是在叶子结点和权重确定的情况下,带权路径长度最小的二叉树,也被称为最优二叉树。
看到这个定义我是一脸懵逼的,什么叶子节点和权重还好,那么路径是指什么呢,一个节点到另一个节点之间的途径?而且带权路径长度又是指什么呢?
什么是路径?
在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径。
上面的二叉树当中,从根结点A到叶子结点H的路径,就是A,B,D,H。
所以路径长度就是3,也就是A=>B=>D=>H。
什么是结点的带权路径长度?
结点的带权路径长度是指:该结点权重的乘积 * 树的根结点到该结点的路径长度。
也就是 1x3=3。
那么树的带权路径长度就是:所有叶子结点的带权路径长度之和
也就是 1x3+2x3+3x2+4x2+5x2=33
哈夫曼树的构造
假设有5个叶子结点,权重依次是1,2,3,4,5,如何构建一颗哈夫曼树,也就是带权路径长度最小的树呢?
伪代码实现:
看到上面所说的每次把权值最小的两个节点合并,是不是瞬间就想到了最小堆呢,我们把权值存放在最小堆里,每次取根节点就可以了。这里直接放截图
哈夫曼编码其实就是哈夫曼树的一种应用
他是一种无前缀编码。解码时不会混淆。其主要应用在数据压缩,加密解密等场合
边栏推荐
猜你喜欢
随机推荐
重发布实验
RIP 实验
Ubuntu下Docker安装Redis (快速简便)
穿越派·派盘 + OmniFocus = 私人项目管理库
C#WPF简述
并发编程第7篇,AQS一些简单的概念
Laravel框架之数据库配置
JS基础-数组
RHCSA--第一天
并发专题第一篇,多线程快速入门和简单介绍
2017年9月历史文章汇总
几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)
LeetCode 0179. 最大数
第三章 数据库设计
NOR flash和NAND flash的区别
测试计划包括哪些内容?目的和意义是什么?
ResNet 6大变体对比
MVC和MVVM
C#中构造函数的作用
将板子芯片从ST32F101改为STM32F103要改的地方