> huffman | 最佳 | 編碼 <
// Huffman 編碼——最佳前綴碼壓縮演算法
0 個字元
0 個字元
>> 功能特色
[OPTIMAL]
最佳碼長
在給定的頻率分佈下,產生平均碼長最短的前綴碼。
[PREFIX-FREE]
前綴自由
任一碼字都不是其他碼字的前綴,確保解碼時不會產生歧義。
[ADAPTIVE]
依頻率調整
出現頻率越高的字元自動獲得越短的碼字,提升整體壓縮效率。
>> 技術細節
Huffman 編碼的運作原理
Huffman 編碼會自底向上建立一棵二元樹。演算法從各個字元的出現頻率開始,重複將頻率最低的兩個節點合併成一個父節點,直到只剩下根節點為止。走向左子樹代表 '0',走向右子樹代表 '1'。頻率越高的字元越靠近根節點,因此可以使用更短的碼字,進而在給定的頻率分佈下達成最優無失真壓縮。
Huffman 編碼範例
Text: "AABBBCCCC"
Frequencies:
A: 2
B: 3
C: 4
Tree Building:
1. Combine A(2) + B(3) = AB(5)
2. Combine C(4) + AB(5) = Root(9)
Tree:
Root(9)
/ \
C(4) AB(5)
/ \
A(2) B(3)
Codes:
C: 0
A: 10
B: 11
Encoded: 10 10 11 11 11 0 0 0 0
= 1010111111 0000
為什麼要使用 Huffman 編碼?
- 接近資訊理論極限的壓縮率
- 實作相對簡單,容易整合進專案
- 是 ZIP/JPEG 等格式中的關鍵元件
- 無失真壓縮,不會遺失任何資料
- 在實際生產環境中已被長期驗證
>> 常見問題
什麼是 Huffman 編碼?
Huffman 編碼是一種最優前綴碼的無失真壓縮演算法,由 David A. Huffman 在 1952 年提出。它根據字元出現的頻率指派長度不同的位元串,頻率越高的字元使用越短的碼字,以此將平均碼長降到最低。
為什麼稱為「前綴碼」或「前綴自由」?
前綴碼指的是任何一個碼字都不會是其他碼字的前綴。例如,如果字元 A 的碼字是 "01",那麼其他字元的碼字就不能以 "01" 開頭。藉由這個性質,只要從左到右讀取位元流,就能在沒有額外分隔符的情況下唯一地還原出每一個碼字。
Huffman 編碼的壓縮效果如何?
對於給定的頻率分佈,Huffman 編碼可以達到非常接近理論熵極限的最優壓縮,通常誤差在 1 個 bit 以內。對英文文字來說,常見的壓縮率約為 60–70%,當字元頻率差異越大時效果越顯著。
Huffman 編碼一般用在哪些地方?
Huffman 編碼廣泛用於 JPEG 影像壓縮、ZIP 檔案壓縮(在 DEFLATE 中與 LZ77 搭配)、MP3 音訊以及許多其他格式。實務上通常會與其他演算法一起使用,例如 JPEG 在 DCT 與量化後使用 Huffman,而 ZIP 則在 LZ77 之後再進行 Huffman 編碼。