当前位置: 首页 > 知识库问答 >
问题:

哈夫曼树算法理解困难

戈睿识
2023-03-14

我在基于频率表的哈夫曼树上工作。频率表是通过计算给定字符串中字符的频率并将相应项(字符和频率)放置在链接列表中生成的。然后,我需要将项目按频率顺序放置在哈夫曼树中。我得到了它背后的逻辑是确保每个子树都有右节点和左节点,添加它们的频率,用它们添加的频率创建一个根节点,将下一个频率分别放在左树和右树中,并重复这个过程,直到没有更多的频率,子树与添加其频率的根连接;我遇到的问题是如何实现代码

代码相当广泛,所以我宁愿避免发布所有代码,总体布局是我有一个HuffmanFrequencyTable类,它允许我构建表,一个HuffmanTreeNode类,它允许我们创建要放置在树中的节点,还有一个HuffmanTree类,它帮助我们创建实际的树。然后,一个encode类输入一个字符串,并使用它创建的HuffmanFrequencyTable从该字符串构建树。这是一个家庭作业问题,所以请不要提供解决方案,我只是希望得到一些帮助,找出它的代码中的逻辑。

现在,我正在创建一个已放置在树中的字符数组,找到不在数组中的表中剩余字符的最低频率,并尝试将它们放置在叶子中。当子树中的基本叶子已满时,我尝试添加这些值,创建一个节点,然后继续向上树。为此,我使用for循环。这看起来是正确的开始吗?

共有2个答案

墨阳羽
2023-03-14

是的。你在正确的轨道上。

在解码时,使用同一棵树,向左或向右遍历,直到到达叶子节点,这就是字符。

欧阳山
2023-03-14

正如Sajit所说,您走在正确的道路上。也许您可以使用以下内容定义一个额外的类HuffmannTuple

public class HuffmannTuple{

    public char character;
    public double frequency;

    public HuffmannTuple(char char, double freq){
        character = char;
        frequency = freq;
    }

}

并创建一个排序列表,用于计算平均字长等值。甚至

public class HuffmannTriple{

    public char character;
    public double frequency;
    public String code;

    public HuffmannTuple(char char, double freq){
        character = char;
        frequency = freq;
    }

    public void setCode(String c){
        code = c;
    }

}

用于以后设置相应的代码。

 类似资料:
  • 主要内容:哈夫曼树相关的几个名词,什么是哈夫曼树,构建哈夫曼树的过程,哈弗曼树中结点结构,构建哈弗曼树的算法实现赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优 二叉树”。学习哈夫曼树之前,首先要了解几个名词。 哈夫曼树相关的几个名词 路径: 在一棵树中,一个结点到另一个结点之间的通路,称为 路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。 路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度

  • 本文向大家介绍java哈夫曼树实例代码,包括了java哈夫曼树实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了哈夫曼树java代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 赫夫曼树 路径和路径长度:表示树从根节点开始到达节点经过的次数,若一颗树根节点为1层,那么第K层的树的路径的长度为K-1 权: 赋予每一个节点上面特定的权重值 带权路径:带权路径等于节点的权与路径长度的乘积,为带权路径 = 权 * 路径长度 树的带权路径长度:为所有叶子节点的带权路径之和记做WPL(weight path length) 赫夫曼树huffman-tree或哈夫曼树,又称最优二叉树,

  • 本文向大家介绍解析C++哈夫曼树编码和译码的实现,包括了解析C++哈夫曼树编码和译码的实现的使用技巧和注意事项,需要的朋友参考一下 一.背景介绍: 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 二.实现步骤: 1.构造一棵哈夫曼树 2.根据创建好

  • 本文向大家介绍霍夫曼编码算法,包括了霍夫曼编码算法的使用技巧和注意事项,需要的朋友参考一下 霍夫曼编码是一种无损数据压缩算法。在该算法中,分配了可变长度代码以输入不同的字符。代码长度与字符使用频率有关。最常见的字符具有最小的代码,较长的代码具有最不频繁的字符。 主要有两个部分。第一个创建霍夫曼树,另一个遍历该树以查找代码。 例如,考虑一些字符串“ YYYZXXYYX”,字符Y的频率大于X,字符Z的

  • 假设你有一个C程序,它必须从给定的文本中读取。txt文件。该计划将: 计算文件中每个字符的出现次数,然后每个唯一字符(及其频率)将存储为一个新的树节点 然后,程序构建包含这些节点的最小堆,然后使用该最小堆构建哈夫曼代码树 遍历(pre order和in order)将写入输出文件。树的每个内部节点都有标签I:xxx,其中xxx是int标签,叶子有L:xxx 该程序最后构造一个表,其中包含存储为字符