2011-04-16 45 views
2

我知道有很多涉及霍夫曼代碼的問題,包括來自我自己的另一個問題,但我想知道實際編碼文本文件的最佳方式是什麼。減壓似乎微不足道;遍歷樹,向左走0,向右走1,打印字符。使用霍夫曼代碼壓縮文件的步驟

雖然,怎麼去壓縮?以某種方式將字符的位表示存儲在樹的節點中?在每次遇到該字符時搜索樹並追蹤步驟?這是編碼的方式是否重要?

到目前爲止,我有一個huffman樹,葉節點沒有與它們相關的二進制值。我的麻煩是將二進制值分配給樹中的每個字符。

感謝

+0

我看着這篇文章,並意識到我的CS事業有多遠。當事情最終點擊時,這是一種驚人的感覺。這個問題現在對我來說似乎非常荒謬。 – 2013-10-10 01:05:08

回答

0

好吧,如果你要編碼的字符基礎上的一個文件,我看不出這個問題,只是不停的符號哈希表,然後構造一個樹&它寫在開頭使用任何你想要的約定的文件,在文本上應用新的字母表。看看DEFLATE中採用的方法,該方法用於壓縮PNG圖像。

編輯

這是不是真的清楚是什麼問題。

在樹上搜索字符每個 遇到它的時間並跟蹤 的步驟?

樹中的每個節點表示一個唯一的符號。你不必搜索任何東西,只有當你已經計算出每個符號的出現時,纔可以構造霍夫曼樹。

因此,您已經開發出構建樹的算法,問題是如何將二進制值分配給節點?或者在哪裏存儲這些值?樹本身自然地表示二進制值,您可以在樹構建過程中實際跟蹤它們,只需在插入操作中保留項目「路徑」的軌跡並將該值存儲在節點內,或者如果不需要創建哈希表想要修改節點實體。

+0

當每個節點連接到「當前根」(當時你已經知道它到了哪裏,向左或向右,所以你知道它是0還是1),你可以遍歷它到修改和修改當前的代碼。但是,這對我來說聽起來不太有效。我寧願先構造一棵樹,然後遍歷一次並將字母對存儲在一個散列表中。 – n535 2011-04-17 13:15:54