`
javasee
  • 浏览: 961075 次
  • 性别: 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树则是一种自平衡二叉搜索树,其特点是任何节点的两个子树的...

    huffman_哈夫曼树_

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

    哈夫曼树实验报告e.docx

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

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

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

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

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

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

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

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

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

    北邮数据结构实验报告三题目2-哈夫曼树.pdf

    哈夫曼树通过构造过程使得频率高的字符编码较短,频率低的字符编码较长,从而在平均情况下减少编码的总长度,达到压缩数据的目的。 **实验要求详解** 1. **初始化**:这一步需要接收一个任意长度的字符串,并统计...

    基于C++哈夫曼树实现的简易版文件压缩【100012737】

    基于C++的哈夫曼树实现简易版文件压缩是一个典型的课程设计项目,它涉及到计算机科学中的编码理论和数据结构。下面将详细介绍这个主题涉及的知识点。 首先,哈夫曼编码是一种高效的前缀编码方法,由哈夫曼在1952年...

    哈夫曼树数据结构-哈夫曼信源编解码 数据结构实验报告.pdf

    总的来说,哈夫曼树和哈夫曼编码是数据结构和算法课程中的重要组成部分,通过实验不仅加深了对理论知识的理解,还锻炼了编程和团队协作能力。为了进一步优化系统,可以考虑将编码存储到数据库中,以支持更大的文本...

Global site tag (gtag.js) - Google Analytics