哈夫曼樹的高效存儲
在實現哈夫曼編碼/解碼時,找到一種有效的方法來存儲哈夫夫曼樹是至關重要的最小化輸出檔案的大小。
兩種情況
有兩種情況需要考慮:
-
單樹儲存:一次處理整個文件時,只需要儲存一棵樹。
-
增量樹儲存:分塊處理大數據時,需要儲存一棵新樹為每個區塊儲存。在這種情況下,節省空間很重要。
建議的解決方案
對於增量樹存儲,建議使用基於位的方法:
-
葉子節點:輸出1位元N位元組/位元組。
-
非葉子節點:輸出0位,然後遞歸地編碼兩個子節點.
解碼
解碼
-
- 解碼
解碼
解碼
解碼
001A1B001B1C1D01E = 59 bits (Tree)
000110010111 = 18 bits (Data)
Total: 77 bits = 10 bytes
登入後複製
解碼如下:讀取1位元。如果為 1,則讀取 N 位元並傳回沒有子節點的新節點。 如果為 0,則解碼左右子節點並傳回沒有值的新節點。 優點可以事先計算樹的大小。 它消除了儲存頻率的需要,這對於解碼來說不是必需的。 它允許高效率的編碼和解碼。 評估對於「AAABBBCCCDE」的具體範例,使用此方法的結果輸出將是:雖然高效,但值得注意的是,對於非常小的數據,儲存樹的開銷可能超過任何節省的費用。
以上是如何有效率地儲存霍夫曼樹進行增量編碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!