huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码

9b7c2d8c164b527853c49697679e0254.png

   艾薇巴蒂!许久不见甚是想念,想必这”涨姿势”的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码

构造哈夫曼树
首先,我们需要了解哈夫曼树是什么:

相关知识点路径: 

       路径是指从一个节点到另一个节点的分支序列。

04d2c5b66bd9ab0e0f48d96b5b3bc322.png

路径长度

       指从一个节点到另一个结点所经过的分支数目。,从根节点到a的分支数目是2,

d96dff6d2f2428b6c8b0fb8a784e6fd6.png

数的路径长度

       树中所有结点的路径长度之和为树的路径长度PL 如图pl为10

cdfb1b1a5c1977e79463e376cc446fc4.png

节点的权

        给树的每个结点赋予一个具有某种实际意义的实数,我们称该实数为这个结点的权

带权路径长度

        从树根到某一结点的路径长度与该节点的权的乘积,叫做该结点的带权路径长度树的带权路径长度: 树的带权路径长度为树中所有叶子节点的带权路径长度之和。

0b0c889f44ecd8e2fa1c5591d960302a.png

构造Huffman树的步骤:
      1) 根据给定的n个权值,构造n棵只有一个根结点的二叉树,n个权值分别是这些二叉树根结点的权;
      2) 设F是由这n棵二叉树构成的集合,在F中选取两棵根结点权值最小的树作为左、右子树,构造成一颗新的二叉树,置新二叉树根结点的权值等于左、右子树根结点的权值之和。为了使得到的哈夫曼树的结构唯一,规定根结点权值最小的作为新二叉树的左子树。

      3) 从F中删除这两棵树,并将新树加入F;
      4) 重复2)、3)步,直到F中只含一棵树为止,这棵树便是Huffman树。
说明:n个结点需要进行n-1次合并,每次合并都产生一个新的结点,最终的Huffman树共有2n-1个结点。

0cc8adac289a88006b0912eedb901b72.png

如何构建哈夫曼树:

a169fb94fb697a565e039b47ff94de0f.png

如上即可较为清晰的理解最优二叉树的构造了。哈夫曼树代码的实现

3a74bd7c94cdf20b507685b2c50a80aa.png

所以:我们构成了一个哈夫曼树的结点结构HTNode:

c3a01b35420b5e5e37c5c58f2deafaff.pnge1913fc99b246bbd86d47e9035f6f39e.png468d98cbaaa4cf2aa6e21d6b5740aeec.png4a6421350e326053e337245dd8e174e5.png73ff2dd94f1eb5f849a3c042fe2bc9d8.pngec13e0b752bf42a7a1e47cb5ec728cba.png

下面给出具体实现代码:

afccdb26ee43789a065c928329ffa4df.png

       不会吧?不会吧?不会真的还有人看了小软的课程还没有明白吧?不明白也没有关系哦,只要动动你可爱的小手指上滑再反复观看,拍拍你聪明的小脑袋瓜就一定能了如指掌啦!

       小软这就去再看一遍,让我们一起加油,顶峰相见!

01b8e6e23646b5e616f5836d72c84b74.png

- END -

图片来源:来源于网络

责任编辑:刘泊璇   连雨欢

6ba455a3df8cd829a8f8b0bd8dfb504c.png

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

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

相关文章

推荐系统相关科技论文写作建议

如何写标题 1、用一句话概括你所做的工作; 2、字数忌长(尽可能不要超过20单词,40-60 字符比较合适); 3、考虑搜索引擎的影响,包含关键词。 4、例子 例子1:Enhancing slope one recommendation…

php 检查类,检查类是否已定义 - PHP 7 中文文档

(PHP 4, PHP 5, PHP 7)class_exists – 检查类是否已定义说明class_exists( string $class_name[, bool $autoload true] ) : bool检查指定的类是否已定义。参数class_name类名。名字的匹配是不分区大小写的。autoload是否默认调用 [__autoload](php7/language.oop5.autoload)…

python人工智能入门纳米学位_学习笔记(一) - 机器学习纳米学位

不久前我在Udacity报名了数据分析和机器学习两门纳米课程。之所以对这个感兴趣是因为关注人工智能方面的资讯有一段时间了,觉得这是未来的趋势,希望今后能够在这方面有所成绩。选择纳米课程是因为我觉得它与Udacity的免费教程有些区别:有专业…

睡眠音频分割及识别问题(一)

问题描述 通过手机App的录音功能,获得用户一整夜的睡眠音频,对睡眠音频进行分割,并对睡眠阶段进行判定。 (1)假设条件一:用户在相对安静的环境下进行睡眠,背景音可能会出现风声、雨声、汽车噪音…

discuz和php的关系,UCenter和Discuz!的关系

在论坛上经常见到一些站长朋友问:我论坛升级后,登录不上去了,提示密码不对;头像不显示了,显示叉烧包;注册、登录不了,提示内部错误等等。这些问题都有个共同点,就是Discuz!论坛本身和…

睡眠音频分割及识别问题(四)--YAMNet简介

简介 YAMNet模型是在 AudioSet 数据集(一个大型音频、视频数据集)上训练的音频事件分类器。 模型输入 该模型接收包含任意长度波形的float32一维张量或 NumPy数组,且满足范围[-1.0, 1.0]内的单声道16kHz样本。在内部,该算法将波…

oracle运行环境配置,oracle 环境配置开机自启动

环境:centos 6.5 oracle 11g自启动之前问题虚拟机里的oracle环境,每次重启完系统,用plsql developer连接,先是报错:无TNS监听程序解决方法是切换到系统的oracle用户,执行lsnrctl start,但是执行之前,因为O…

睡眠音频分割及识别问题(二)

输入 通过手机麦克风录制的任意长度睡眠声音。 输出 睡眠阶段曲线,该曲线可以反映出深度睡眠,浅度睡眠、REM睡眠、清醒各个阶段。 研究的核心问题 1、录制策略 (1)每隔10分钟录制一段睡眠音; 2、采用什么策略来…

睡眠音频分割及识别问题(三)

文献一:PANNs: Large-Scale Pretrained Audio Neural Networks for Audio Pattern Recognition [摘要] 音频模式识别是机器学习领域的一个重要研究课题,包括音频标注、声场景分类、音乐分类、语音情感分类和声音事件检测等多项任务。最近,神…

对应oracle生成java对象,Java学习笔记(十三)——通过Netbeans开发环境生成oracle数据库中表的对应hibernate映射文件...

【前面的话】身体慢慢已经快好了,感觉真好,哈哈。这篇文章要通过Hibernate对数据库进行操作,而Netbeans可以直接通过数据库逆向生成对应的映射文件。基础文章,选择性阅读。【步骤】1、 在netbeans中选择服务,点击数据库…

qt如何实现backspace的功能_如何实现知识星球列表拖拽功能

本 篇讲解一下如何实现在知识星球中星球列表的拖拽,各位可能都知道,我创建了一个星球【Hi Android】,所以最近使用这个软件比较多,之前也写过关于这个软件如何生成分享卡的文章,就是那篇文章有小伙伴建议我写一个星球的…

睡眠音频分割及识别问题(五)--YAMNet进一步分析

简介 YAMNet 是一个经过预训练的深度网络,可基于 AudioSet-YouTube 语料库 预测 521 种音频事件类别,并采用Mobilenet_v1深度可分离卷积架构。 输入 模型训练所使用的音频特征计算方式如下: 所有音频均重采样为 16 kHz 单声道。 通过长度…

vb.net调用oracle存储过程,vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc...

vbnet2008连接oracle增删改查学习笔记(经典crud_含存储过程).doc 我的VBNETORACLE增删改查学习笔记(本源码在VBNET2008下测试通过)学习VBNET有一段时间了,之前一直学习VB60。过度到NET后发现与之前所学习的有了相当大的变化。于是将编程经常用到的增删改查代码提炼出…

睡眠音频分割及识别问题(六)--输入输出及方案讨论

简介 2021年7月13日,我和我的三个研究生一起拜访了玉米树,和王总等一起针对睡眠音频分割及识别问题进行了深入的讨论,达成了如下共识。 输入 由于保存整个晚上的睡眠音频所需要的存储空间过大,目前拟采用每隔30分钟&#xff08…

python文件独特行数_python——文件和数据格式化练习题:文件独特行数

描述 统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。 问题分析 这道题是python123课程里面的一道题,我先说一下我的分析过程: 要实现问题找到不同行数,那就要用每一行分别和出它以外剩余所有行比较&#xff0c…

睡眠音频分割及识别问题(七)--接口输入输出讨论

简介 关于接口输入输出的讨论。 输入 1、音频文件路径,类型为:字符串; 2、预测多标签类型的排名,前n名,类型为:整型。 处理 1、将输入的音频分割为多个以1s为时间单位的音频片段; 2、利用P…

dhcp工具_网络分析之DHCP服务闯入QinQ二层隧道引发故障

一、Wireshark显示过滤器和QinQ二层隧道简述1.本段主要简述什么是Wireshark显示过滤器。显示过滤器是在现有的数据包中通过过滤条件,筛选想要查看的对象,不会丢失数据包,只是为了增强用户阅读而将一部分数据包隐藏起来。在“应用显…

php redis存储位置,redis数据保存在哪里

redis的数据是存在内存里吗?首先要明白redis是一个数据库,redis是一个内存数据库,所有数据基本上都存在于内存当中,会定时以追加或者快照的方式刷新到硬盘中。 (推荐学习:Redis视频教程)由于redis是一个内存数据库&…

python 多条件 选择 算法_浅析Python中的多条件排序实现

多条件排序及itemgetter的应用曾经客户端的同事用as写一大堆代码来排序,在得知Python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣。 之前在做足球的积分榜的时候需要用到多条件排序,如果积分相同,则按净胜球…

推荐系统: 数据、问题与算法

网络的迅速发展带来了信息量的大幅增长,使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,导致信息超载(information overload)问题。 解决信息超载问题一个非常有潜力的办…