2012-10-24 44 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

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