2012-10-24 43 views
0

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

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

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

回答

1

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

而对于解码,您使用相同的树并且遍历左侧或右侧,直到您到达叶节点并且是字符。

+0

谢谢你让我知道我没有脱落,只是不想继续走错路。退后一步,深吸一口气,摆脱了我代码中的垃圾,认为它很好。谢谢:) –

2

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

} 

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

+0

非常正是我们在骨架文件中所做的。谢谢 :) –