用於資料壓縮的高效霍夫曼樹儲存
霍夫曼編碼透過為更頻繁的字元分配更短的程式碼來優化數據。為了儲存建構的霍夫曼樹,有幾種方法。
最小化樹大小的方法
如果輸入資料很小,則在效率和開銷之間存在權衡。對於較大的資料集,請考慮以下方法:
不儲存頻率。 -
- 對每個節點:
如果是葉節點,輸出 1 位,後跟字元/位元組(N 位元)。 - 如果不是葉節點,則輸出 0 位元並遞歸編碼兩個子節點。
-
解碼過程:
讀一點。 - 如果為 1,請讀取 N 位元字元/位元組並建立葉節點。
-
如果為 0,則遞歸讀取左右子節點。 -
範例
考慮輸入「AAAABCCCCCCDDEEEEE」。
- 樹:
20
----------
| 8
| -------
12 | 3
----- | -----
A C E B D
6 6 5 1 2
登入後複製
- 路徑:
A:00- :110
- C: 01
- D: 111
- E: 10
-
-
-
- 樹:001A1C01E01B1D(49位元)
- 資料:00000000000011001010101010111111110101010101010101011111110101010101010101010101010103223333字節( >
比較
不使用霍夫曼編碼:
20 個字元* 8 位元= 160 位元(20 位元組)- 20 個字元* 8 位元= 160 位元(20 位元組)
使用霍夫曼編碼:
小資料的注意事項
小資料的注意事項
對於較小的輸入數據,儲存頻率的方法可能是更節省空間。計算:
樹大小= 10 * 字元數- 1編碼大小= Sum(每個字元的頻率* 字元路徑長度)
這種方法最大限度地減少了空間浪費的可能性。
以上是如何有效率地儲存哈夫曼樹進行資料壓縮?的詳細內容。更多資訊請關注PHP中文網其他相關文章!