【问题标题】:Trouble understanding Huffman Tree algorithm难以理解霍夫曼树算法
【发布时间】:2012-10-24 05:06:24
【问题描述】:

我正在研究基于频率表的霍夫曼树。频率表是通过计算给定字符串中字符的频率并将相应的项目(字符和频率)放在 LinkedList 中生成的。然后,我需要按照它们的频率顺序将这些项目放在霍夫曼树中。我知道它背后的逻辑是确保每个子树都有左右节点,添加它们的频率,使用它们添加的频率创建一个根节点,将下一个频率分别放在左右树中并重复此过程直到没有更多的频率,并且子树与添加频率的根相连;我遇到的麻烦是弄清楚如何实现代码。

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

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

【问题讨论】:

    标签: java tree huffman-code


    【解决方案1】:

    正如 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;
        }
    
    }
    

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

    【讨论】:

    • 几乎就是我们在骨架文件中必须做的事情。谢谢你:)
    【解决方案2】:

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

    对于解码,您使用同一棵树,然后向左或向右遍历,直到到达叶节点,这就是字符。

    【讨论】:

    • 感谢您让我知道我并没有离开,只是不想继续走错路。退后一步,深吸一口气,摆脱了我代码中的垃圾,并认为这很好。谢谢你:)
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多