数据结构----哈夫曼树

这篇具有很好参考价值的文章主要介绍了数据结构----哈夫曼树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本概念

引子

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
哈夫曼树就是寻找构造最优二叉树,用于提高效率

基本概念

各种路径长度

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构

各种带权路径长度

结点的带权路径长度

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构

树的带权路径长度

哈夫曼树csdn,数据结构,数据结构

哈夫曼树csdn,数据结构,数据结构

哈夫曼树

哈夫曼树csdn,数据结构,数据结构
带权路径长度最短的树或者二叉树

也就是树的叶子结点带权路径长度之和 :也就是叶子结点的结点路径长度(根结点到叶子结点的路径数) *权重 再求和
哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
总结:位高权重
并且哈夫曼树不唯一

哈夫曼树的构造

理论基础

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构

构造思想

哈夫曼树csdn,数据结构,数据结构
可以看到 先将所有结点看成根结点构造出森林 并将权重赋值给结点
之后 选择两个小权重的结点 二者构造出新树 如上图 新树根结点权重为子树结点权重之和
这时要先将森林中的两个树删除 之后 将两个树构造成的新树加入森林(为了进行下一次权重的比较 从而下一步构造的顺利进行)
重复23步 直到剩单根

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
度 是指结点有的子树个数

哈夫曼树结点的度只能是0或者2
n个叶子结点的哈夫曼树 一共有2n-1个结点 分析如上橙色框

总结

哈夫曼树csdn,数据结构,数据结构

哈夫曼树的实现

哈夫曼树csdn,数据结构,数据结构
首先是已知叶子结点的个数以及权重

依次放入结构数组的前面 数组一共长度是2n 因为结点一共有2n-1 所以构造2n的数组 不用0下标

进行第二步 合并的时候 将新合并出来的结点往后依次放入 所以根结点是数组中的最后一个位置

新节点合成的时候 要修改新节点数组中的孩子结点下标 两个孩子要修改数组中双亲的下标

之后重复查找最小的权重的两个结点 前提是parent值是空 这是判断的关键 一旦parent值不为空的时候 就相当于退出了比较

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
初始化

哈夫曼树csdn,数据结构,数据结构
上图中select方法 功能是在HT[K]中选择两个双亲域为0并且权重最小的结点 并返回s1 s2 用于后续操作

方法参数中i-1 是新合成结点的下标 ,在选最小的两个结点时 要从新节点前面选 这里对应理论分析中“第三步的a步骤”
i会逐渐递增

哈夫曼编码

前缀编码

哈夫曼树csdn,数据结构,数据结构
图中为非前缀编码 所以要设计任意一个字符的编码都不是另一个字符编码的前缀
但是可以前缀一样 后面不一样

哈夫曼编码的思想

哈夫曼树csdn,数据结构,数据结构
要想出现次数最多的编码最短 正好对应哈夫曼树的权重越大离跟结点越近的特点
哈夫曼树csdn,数据结构,数据结构
所以在路径上标注0 或者 1
看从根结点到某一个叶子结点经过的路径 那些路径得出来的编码就是字符对应的二进制编码

因为叶子结点不会出现一个字符的路径完全包含另一个字符的路径 所以也就是前缀编码
并且要想出现次数最多的编码最短 正好对应哈夫曼树的权重越大离跟结点越近的特点 所以哈夫曼编码效率更高
哈夫曼树csdn,数据结构,数据结构
因为叶子结点不会出现一个字符的路径完全包含另一个字符的路径 所以也就是前缀编码
并且要想出现次数最多的编码最短 正好对应哈夫曼树的权重越大离跟结点越近的特点 所以哈夫曼编码效率更高

案例

哈夫曼树csdn,数据结构,数据结构
先根据哈夫曼树的设计思想 画出来哈夫曼树 在路径上标注0 1
哈夫曼树csdn,数据结构,数据结构

代码实现

哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
其中HC数组是指针数组 每个指针指向对应的字符串 也就是字符串的头指针

编码与解码

哈夫曼树csdn,数据结构,数据结构
进行哈夫曼编码时 构造指针数组
哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
哈夫曼树csdn,数据结构,数据结构
先根据哈夫曼树的构造思想+字符频度表 构造出哈夫曼树 标上各个叶子结点代表的字符 之后开始解码 0就向左走 1就向右走 直到走到叶子结点 记录一个字符 重复此操作即可文章来源地址https://www.toymoban.com/news/detail-810508.html

到了这里,关于数据结构----哈夫曼树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构-哈夫曼树

    介绍 哈夫曼树,指 带权路径长度最短的二叉树 ,通常用于数据压缩中 什么是带权路径长度? 假设有一个结点,我们为它赋值,这个值我们称为权值,那么从根结点到它所在位置,所经历的路径,与这个权值的积,就是它的带权路径长度。 比如有这样一棵树,D权值为2  从

    2024年02月20日
    浏览(31)
  • 数据结构----哈夫曼树

    哈夫曼树就是寻找构造最优二叉树,用于提高效率 各种路径长度 各种带权路径长度 结点的带权路径长度 树的带权路径长度 哈夫曼树 带权路径长度最短的树或者二叉树 也就是树的叶子结点带权路径长度之和 :也就是叶子结点的结点路径长度(根结点到叶子结点的路径数)

    2024年01月21日
    浏览(39)
  • 数据结构【哈夫曼树】

    最优二叉树也称哈夫曼 (Huffman) 树 ,是指对于一组带有确定权值的叶子结点,构造的具有最小带权路径长度的二叉树。权值是指一个与特定结点相关的数值。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 涉及到的几个概念: 路径: 从树中一个结点到另一个结

    2024年02月14日
    浏览(26)
  • 【数据结构实验】哈夫曼树

    为一个信息收发站编写一个哈夫曼码的编/译码系统。文末贴出了源代码。 完整的系统需要具备完整的功能,包含初始化、编码、译码、印代码文件和印哈夫曼树,因此需要进行相应的文件操作进行配合。 哈夫曼树的字符集和频度可以从文件中读入,也可以让用户手动输入,

    2023年04月22日
    浏览(34)
  • 【数据结构-树】哈夫曼树

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月08日
    浏览(35)
  • 【数据结构】实验十:哈夫曼编码

    实验十 哈夫曼编码 一、实验目的与要求 1 )掌握树、森林与二叉树的转换; 2 )掌握哈夫曼树和哈夫曼编码算法的实现; 二、 实验内容 1.  请编程实现如图所示的树转化为二叉树。 2.  编程实现一个哈夫曼编码系统,系统功能包括: (1)  字符信息统计:读取待编码的源文

    2024年02月15日
    浏览(35)
  • 数据结构—哈夫曼树及其应用

    5.6哈夫曼树及其应用 5.6.1哈夫曼树的基本概念 路径 :从树中一个结点到另一个结点之间的 分支 构成这两个结点间的路径。 结点的路径长度 :两结点间路径上的 分支数 。 树的路径长度 :从 树根 到每一个结点的 路径长度之和 。记作 TL 结点数目相同的二叉树中,完全二叉

    2024年02月14日
    浏览(26)
  • 【数据结构 】哈夫曼编译码器

    利用哈夫曼编码进行信息通信可大大提高信道利用率,缩短信息传输时间,降低传输成本。 要求:在发送端通过一个编码系统对待传数据预先编码;在接收端将传入的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要个完整的编/译码系统。试为

    2024年01月18日
    浏览(35)
  • 数据结构与算法--哈夫曼树应用

    第1关:统计报文中各个字符出现的次数 任务描述 本关任务: 给定一串文本,统计其中各个字符出现的次数; 测试说明 平台会对你编写的代码进行测试: 测试输入:` abcdeabcdeabcdabcdabcdabcbccc 预期输出: a 6 b 7 c 9 d 5 e 2 代码: 第2关:对第一关报文中的各个字符进行哈夫曼编

    2024年02月06日
    浏览(36)
  • 数据结构—基础知识:哈夫曼树

    哈夫曼(Huffman)树 又称最优树,是一类带权路径长度最短的树,在实际中有广泛的用途。哈夫曼树的定义,涉及路径、路径长度、权等概念,下面先给出这些概念的定义,然后再介绍哈夫曼树 路径 :从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 路

    2024年02月21日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包