`
javasee
  • 浏览: 965086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之哈夫曼树 下)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


前面说到了哈夫曼树的创建,那下面一个重要的环节就是哈夫曼树的排序问题。但是由于排序的内容是数据结构,因此形式上说,我们需要采用通用数据排序算法,这在我之前的博客里面已经涉及到了(通用算法设计)。所以,我们所要做的就是编写compare和swap两个函数。通用冒泡代码如下所示,

compare和swap代码如下所示,

有了创建函数和排序函数,那么哈夫曼树就可以创建了,

上面的代码完整了写出了huffman树的创建过程,那么我们怎么知道符号的编码是多少呢?这其实不难,因为根节点都知道了,我们只要按照自下而上的顺序遍历节点就可以打印出编码,只不过编码是逆序的而已,

如果对代码本身还有怀疑,可以编译一个测试用例验证一下,


总结:

(1)哈夫曼树不复杂,如果手算可以成功,那么编程应该也没有什么问题

(2)复杂算法都是由小算法搭积木而成的,朋友们应该在基本算法上打下坚实的基础

(3)算法注意复用,这里就用到了原来讲到的通用算法内容





分享到:
评论

相关推荐

    数据结构实验二哈夫曼树及哈夫曼编码译码的实现

    哈夫曼树是一种特殊的二叉树,它的每个节点的权重是其所有子节点的权重之和。哈夫曼树的应用非常广泛,如数据压缩、编码、译码等。 哈夫曼树的存储结构 哈夫曼树的存储结构可以使用静态三叉链表来实现。每个节点...

    贪心算法解哈夫曼编码问题

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择策略,从而希望导致结果是全局最好或最优的算法。在哈夫曼编码问题中,贪心算法的核心思想在于每次选择两个频率最低的字符进行合并,构建哈夫曼树的...

    算法分析 哈夫曼编码

    其构造过程是贪心算法的典型应用,即在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。在构建哈夫曼树的过程中,会从一系列权值中选出两个最小的合并为一个节点,其权值为...

    用贪心算法解哈夫曼编码问题(计算机算法设计与分析)

    贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法策略。哈夫曼编码是数据压缩中使用的一种高效编码方式,它通过构建一棵特殊的二叉树——哈夫曼树,...

    哈夫曼树的相关程序,试验

    哈夫曼树构建过程中,每次从所有节点中选取两个权值最小的节点作为新的节点的左右子节点,并更新新节点的权值为这两个子节点权值之和,重复此过程直至只剩下一个节点为止,这个节点即为哈夫曼树的根节点。...

    C++关于哈夫曼树的建立

    贪心算法的核心在于每一步都选择当前最优的策略,即在每一步都选择权值最小的两个节点进行合并,这样的选择保证了最终生成的哈夫曼树具有最小的带权路径长度。这种方法不仅效率高,而且容易实现。 构建哈夫曼树的...

    贪心算法-哈夫曼编码

    哈夫曼编码是一种高效的数据编码方法,常用于数据压缩领域,其主要原理是利用贪心算法构建最优的二叉树,即哈夫曼树。在哈夫曼编码中,频率较高的字符会被赋予较短的编码,反之频率较低的字符则编码较长,以此达到对...

    如何实现哈夫曼树编码

    3. **重复构造**:重复上一步,直到所有字符都被合并成一颗完整的树,这棵树的根节点即为整个哈夫曼树的根。 4. **生成编码**:从根节点出发到每个叶子节点,沿途经过的路径即为该字符的哈夫曼编码。左子树代表“0”...

    二叉树、哈夫曼树课件

    哈夫曼树的构建基于贪心策略,通过合并频率最小的两个节点(即权值最小的节点)来构建,重复此过程直至只剩下一个节点,这个过程称为哈夫曼编码。 哈夫曼树的构造过程: 1. 将每个字符及其频率作为一个节点放入优先...

    基于C++进行数据结构算法之实验(哈夫曼树)【100012523】

    在IT领域,数据结构与算法是基础且至关重要的部分,它们直接影响到软件的效率和性能。本实验聚焦于C++编程语言,通过实现哈夫曼树...掌握哈夫曼树的原理和实现方法,对于任何IT专业人员来说,都是提升技能的重要一步。

    哈夫曼树算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    数据结构与算法的一些实例,数据结构包括图(遍历算法)、树(哈夫曼树、AVL平衡树等)

    哈夫曼树,又称最优二叉树,是一种带权路径长度最短的二叉树,常用于数据压缩。它的构建基于哈夫曼编码,通过最小带权路径长度来实现数据的高效编码。AVL树则是一种自平衡二叉搜索树,其特点是任何节点的两个子树的...

    数据结构第六章哈夫曼树PPT学习教案.pptx

    在计算机科学的数据结构领域中,哈夫曼树(Huffman Tree)是一个被广泛研究和应用的树结构,特别是在数据压缩和编码技术中,哈夫曼树显示出了它的独特...掌握了哈夫曼树,就是在数据结构的学习道路上迈出了坚实的一步。

    huffman_哈夫曼树_

    哈夫曼树(Huffman Tree),也称为最优二叉树,是数据压缩中的一种关键算法,由美国计算机科学家大卫·艾伦·哈夫曼在1952年提出。哈夫曼树是一种特殊的二叉树,其每个叶子节点代表一个需要编码的字符,而内部节点...

    哈夫曼树实验报告e.docx

    哈夫曼树的建立完成后,可以生成哈夫曼编码,这一步通常通过从根节点到每个叶子节点的路径来确定,路径上左分支表示0,右分支表示1。生成的编码表对于后续的数据压缩至关重要,因为每个字符的编码对应其在哈夫曼树中...

    实验四哈夫曼树及哈夫曼编码 (2).docx

    【哈夫曼树与哈夫曼编码】 哈夫曼树是一种特殊的二叉树,由哈夫曼(Huffman)在1953年提出,主要用于数据压缩和编码。它的主要特点是具有最小带权路径长度(WPL),即树中所有叶子节点到根节点的路径加权和最小。在...

    从文件读取字符串建立哈夫曼树并进行哈夫曼编码

    实验报告则会详述每一步的操作,展示哈夫曼树的构建过程,以及压缩前后的字符串长度对比,以证明哈夫曼编码的压缩效果。 总之,哈夫曼编码是数据压缩的重要工具,通过从文件中读取字符串构建哈夫曼树,我们可以实现...

    java 哈夫曼压缩算法的分析与实现[源码][附图]

    它基于一种称为“最小带权路径长度”的原则,通过构建一棵特殊的二叉树(哈夫曼树)来对数据进行编码。在这个过程中,出现频率高的字符将得到较短的编码,而出现频率低的字符则获得较长的编码,从而在整体上达到压缩...

    数据结构实验报告(哈夫曼树).docx

    哈夫曼树由美国科学家David Huffman于1952年提出,其构建过程基于贪心算法思想,能有效减少数据存储空间及传输时所需的带宽资源。 #### 构建哈夫曼树的步骤 1. **初始化**:将待编码的字符及其出现频度作为叶子...

    构造哈夫曼树及哈夫曼编码.pdf

    通过构建哈夫曼树并生成哈夫曼编码,能够在不丢失任何信息的前提下,有效减少数据量,提升存储和传输效率。虽然在具体实现时可能会遇到一些技术细节问题,但只要掌握了其原理和基本构建过程,就能够开发出高效的...

Global site tag (gtag.js) - Google Analytics