如何构造哈夫曼树

目录

一、哈夫曼树的概念 

 1、结点的权:

 2、结点的带权路径长度

3、树的带权路径长度

4、哈夫曼树 

 二、哈夫曼树的构造     

1、构造步骤

 三、哈夫曼树的编码


一、哈夫曼树的概念 

        1、结点的权:

              定义:  每个结点的权重(重要性)

        如上图:假设每个结点权重都是数字,那么每个数字代表的就是这个结点的权重

 2、结点的带权路径长度

        定义:是指从根节点出发一直到该节点的分支数目乘以权重 

如下图:

上图计算了权重为2和4的带权路径长度,分别为6和8

3、树的带权路径长度

        定义:从根结点出发一直到所有的叶子结点的分支数目乘以该叶子结点的权重之和,称为“树的带权路径长度”

        这颗树的带权路径长度就为34;

        计算方法是:每个叶子结点到根节点的路径数目*权重 之和

4、哈夫曼树 

        定义:树的带权路径长度最小的树,称之为“哈夫曼树”,也称为“最优二叉树”,应用:编码(哈夫曼编码)问题

        假如现在有很多个结点,我们用这些结点构造了很多个二叉树,这些二叉树的带权路径长度最小的,就是我们说的哈夫曼树,也叫“最优二叉树”

 二、哈夫曼树的构造     

        (1)创建n个具有一个结点的二叉树,n个具有一个结点的二叉树就构成了深林T={T1,T2,T3,.......................}

        (2)在深林T中取出两个权重最小的二叉树组成一个新的二叉树(两个二叉树的权重相加称为新的二叉树的权重),将新的二叉树放入深林中

        (3)重复第(2)步,直到最终构成的一棵树,就成为“哈夫曼树”

         如果单纯看概念,其实很难看懂;

1、构造步骤

下面是一些结点:

        第一步:从这些结点中找到权重最小的结点,组成一个树。组成树的根的权重值是两个子树权重值的相加

        第二步:重复第一步

        

        最终得到哈夫曼树如下图:树的权重=28

        当然还有另外的构造方法:将权重最小的两个组成一个树,再把剩下的权重最小的两个结点组成一个树 ,两个树的根组成一个新的树,依此类推,直到没有结点

        如下图:树的权重:28

 哈夫曼树特点:

        离根结点越近,结点的权重越大

        离根结点越远,结点的权重越小

        结点的度没有为1的情况,结点的度要么是2要么是0

 三、哈夫曼树的编码

        编码方式:

将哈夫曼树中的结点的左分支编码为0,将结点的右分支编码为1

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413544.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux终端简单配置(Vim、oh-my-zsh和Terminator)

文章目录 0. 概述1. 完整Vim配置2. Vim配置方案解释2.1 状态行与配色方案2.2 文件管理与缓存设置2.3 搜索与导航优化2.4 缩进与格式化设置2.5 粘贴模式快捷切换2.6 文件编码与格式2.7 性能优化 3. 安装 Oh My Zsh 及配置3.1 安装 Oh My Zsh3.2 Oh My Zsh 配置 3. Terminator终端…

Linux Grep案例

目录 一. 查询两个文件第一列的数据并去重二. 抽取日志中指定的字段三. 服务器指定时间点异常查询四. 从csv文件中抽取指定的数据五. 获取除了空白行和注释之外的部分 一. 查询两个文件第一列的数据并去重 📚file1.log 123 aaa 你好 345 bbb 我好 345 ccc 大家好 …

神经网络搭建实战与Sequential的使用

一、需要处理的图像 二、对上述图片用代码表示: import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass SUN(nn.Module):def __init__(self):super(SUN, self).__init__()self.conv1 Conv2d(3, 32, 5, padding2)self…

RSTP的改进有哪些

华为设备生成树有几种模式? 4种模式:传统STP(802.1D)、RSTP(802.1w)、MSTP(802.1s)、VBST(基于VLAN的生成树,兼容某些厂商的每VLAN一颗生成树) A…

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋…

Rust Linux开发人员自比道路建设者和寻路者的区别

红帽公司(Red Hat)的长期直接渲染管理器(Direct Rendering Manager,DRM)子系统维护者大卫-艾尔里(David Airlie)撰写了一篇有趣的博文,将开发人员的类型与筑路工人、寻路者与酒店进行…

swift自定义数据集微调Qwen-7B大模型,转换模型后使用ollama跑起来

前文:swift微调Qwen-7B大模型-CSDN博客 我详细介绍了swift如何进行微调,但数据集均来自魔搭社区,如何想训练自定义数据集,实际上也很简单。 一、自定义数据集微调 export MKL_THREADING_LAYERGNU \ CUDA_VISIBLE_DEVICES0,1,2…

本地编写Markdown格式文件,浏览器查看

编写准备 下载VsCode并安装,打开后在内部安装Markdown All in One、Markdown Preview Enhanced、Paste Image三个插件。新建一个文件夹用以后期保存你的笔记等文件在左侧新建文件,.md结尾,即完成创建右侧可实时的查看你的编写结果&#xff0…

大模型赋能风控运营:效率跃升的密码

一、大模型助力风控运营的背景与趋势 大模型兴起的背景 随着金融行业的迅速发展和数据量的爆炸式增长,传统的风控运营手段逐渐难以满足复杂多变的风险形势。大数据、人工智能等技术的不断进步,为大模型在风控运营领域的应用提供了技术支撑。金融机构面…

【算法】演员~评论家方法

一、引言 演员-评论家算法(Actors-Critics Method)是一种用于并发编程中的同步机制,用于解决多线程环境下的资源竞争问题。与传统的锁和信号量等同步工具不同,演员-评论家方法采用更加灵活的协作策略。算法结合了策略梯度&#xf…

PyQt5:pycharm设置及使用

前言 PyQt5 是一个用于创建图形用户界面的 Python 库,它是 Qt 应用程序框架的 Python 绑定。Qt 是一个广泛使用的跨平台 C 框架,PyQt5 允许开发者使用 Python 编写图形界面应用程序,而不必直接使用 C。 为了方便地使用它,我尝试在…

【MySQL进阶之路】数据库的操作

目录 创建数据库 字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定字符集和校验规则 在配置文件中配置 查看数据库 显示创建语句 修改数据库 删除数据库 数据库的备份和恢复 备份整个数据库 备份特定表 备份多个数据库 备份所有数据…

【大模型】LangChain基础学习

前言:LangChain是一个用于构建端到端语言模型应用的框架 目录 1. 基础知识2. 基本使用2.1 安装2.2 启动示例2.3 使用prompt2.4 输出解析器 3. 相关应用3.1 RAG 参考文献 1. 基础知识 六大组件 模型(Models):包含各大语言模型的LangChain接口…

Redis从入门到入门(上)

1.Redis概述 文章目录 1.Redis概述1.1 什么是Redis1.2 Redis的应用场景 2.Linux下Redis的安装与使用2.1 Redis下载2.2 Redis的启动2.3 Redis配置2.4 连接Redis 1.1 什么是Redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库&#xff0…

MATLAB生成COE文件

MATLAB代码 % 参数设置 N 4096; % 数据点数量 t linspace(0, 2*pi, N); % 时间向量 width 12; % 位宽% 正弦波,幅度在0到5之间 sine_wave 2.5 * sin(t) 2.5;% 三角波,幅度在0到5之间 tri_wave 5 * (1 - abs(mod(t/(2*pi)*4, 2) - 1));% 方波&…

springboot集成七牛云上传文件

大体思路 上传 前端上传MultipartFile file 文件 进行名字空值校验和格式校验,大概就是判断后缀是不是属于jpg.png 生成唯一uuid名称,然后拿着这个文件名和图片文件File调接口 接口参数为 输入流inputstream,将file化流传输文件名上传t…

多线程+连接池+代理 运行一段时间线程阻塞,如何解决??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

<Rust>egui学习之小部件(四):如何在窗口中添加滚动条Scroll部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第四篇博…

今日算法:蓝桥杯基础题之“切面条”

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注!个人知乎 从今天开始,一起了解算法,每日一题,从 JavScript 的技术角度进行解答,如果你对算法也感兴趣,请多多关注哦。 问题描述 一…

【深度学习与NLP】——深度卷积神经网络AlexNet

目录 一、卷积神经网络的发展历程 二、简要介绍 三、代码实现 四、缺点和过时的地方 一、卷积神经网络的发展历程 早期理论基础阶段(20 世纪 60 年代 - 80 年代): 1968 年,Hubel 和 Wiesel 通过对猫视觉神经的研究&#xff0…