English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

guest
1 / ?
back to lessons

碼作為樹

前綴碼映射到一棵二叉樹:根表示解碼的開始,左分支表示位元0,右分支表示位元1,葉表示完整的碼字。

幾何約束:每個葉終止一條從根到葉的路徑。沒有葉可以有後代(如果有,其碼字就是後代碼字的前綴,違反前綴碼性質)。

前綴碼解碼樹

這給出了Kraft不等式的幾何解釋:

深度為d的每個葉'佔據'樹總容量的分數2^(−d)。完整二叉樹在深度D的總容量為1。前綴碼在各種深度使用葉;Kraft和測量總佔據。

Kraft和 = 1:完整碼(每條路徑終止於葉——完美填充)。

Kraft和 < 1:不完整碼(某些樹容量未使用——可以添加更多符號)。

Kraft和 > 1:前綴碼不可能(某些路徑必須共享葉)。

更深的葉 = 更長的碼 = 更小的容量

深度為1的葉使用樹容量的一半(2^(−1) = 0.5)。

深度為3的葉使用八分之一(2^(−3) = 0.125)。

在樹中的高處放置短碼字會阻止其所有後代被使用——你用一個短碼交換許多潛在的更長的碼。

構建前綴碼樹

考慮5個符號,碼長l = {1, 2, 3, 3, 3}。Kraft和 = 2^(−1) + 2^(−2) + 3·2^(−3) = 0.5 + 0.25 + 0.375 = 1.125 > 1。

這超過1:這些長度與前綴碼不相容。至少一個長度必須增加。

修復:將l_1從1改為2。新長度{2, 2, 3, 3, 3}:Kraft = 2·2^(−2) + 3·2^(−3) = 0.5 + 0.375 = 0.875 < 1。有效,但不完整。

修復:將l_1從2改為2,添加l_2 = 3以使用剩餘容量。Kraft = 0.875;剩餘 = 0.125 = 2^(−3):還有一個深度3葉的空間。

一個6符號的信源提議碼長l = {1, 2, 3, 3, 4, 4}。計算Kraft和。如果超過1,找到最小調整(以最少量改變一個長度)使Kraft ≤ 1,同時保持所有長度 ≥ 1。展示你的工作。

為什麼熵約束碼長度

Kraft不等式約束碼的結構(長度必須適應樹)。Shannon熵約束碼的效率(平均長度無法超越理論下限)。

最優碼長。對於概率為p_i的符號,理想碼長是log₂(1/p_i)。罕見符號值得長碼;常見符號值得短碼。這反映了Kraft等式:當l_i = log₂(1/p_i)時,2^(−l_i) = p_i。

但log₂(1/p_i)很少是整數。四捨五入到⌈log₂(1/p_i)⌉得到Huffman長度,滿足H ≤ L < H + 1。

幾何解釋。在二叉樹的深度l_i處繪製每個符號作為一點。Kraft和測量總葉覆蓋。熵測量加權平均深度,按概率加權。Shannon定理:按概率加權的平均深度 ≥ 按概率加權的信息含量。

熵界驗證

所述例子:對於符號{A, B, C, D},p = [1/2, 1/4, 1/8, 1/8]。

最優長度:l_A = log₂(2) = 1,l_B = log₂(4) = 2,l_C = log₂(8) = 3,l_D = log₂(8) = 3。

這些都是整數——完美匹配。Huffman碼:A=0,B=10,C=110,D=111。

L = 0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 0.5 + 0.5 + 0.375 + 0.375 = 1.75。

H = 0.5·1 + 0.25·2 + 0.125·3 + 0.125·3 = 1.75。L = H恰好:最優碼。

對於p = [1/2, 1/4, 1/8, 1/8],驗證Kraft不等式,計算H,計算所給碼{A=0, B=10, C=110, D=111}的L,並確認L = H。然後用一句話解釋為什麼這些長度是'理想的',意思是每個符號的2^(−l_i) = p_i。

完整的工作例子

完整管道:給定概率,計算熵,驗證碼滿足界限。

信源:p(A)=0.5,p(B)=0.25,p(C)=0.125,p(D)=0.125。

H = 1.75位(如上計算)。

一個簡單的塊碼:4個符號→每個2位→L = 2.0。超過熵的開銷:2.0 − 1.75 = 0.25位/符號 = 12.5%浪費。

變長碼相對於固定長度碼節省12.5%。對於大消息,這是可觀的。

英文的熵率。Shannon估計書面英文的熵約為每個字符1.0到1.3位,儘管使用5位ASCII碼。該4:1比率反映了自然語言中的大量冗餘——常見字母聚集,單詞重複,語法約束序列。

壓縮無法超越熵

壓縮比:H /(塊碼長度)。對於我們的例子:1.75/2.0 = 0.875——87.5%效率。

你能進一步壓縮嗎?只能通過使用上下文:如果你將符號對或三元組編碼在一起,聯合熵H(X,Y)可能少於2·H(X),因為統計依賴性。這是無噪聲編碼定理對n-元組的擴展。

信源Z有8個等概率符號(p_i = 1/8,i=1..8)。計算H(Z)。每個符號的最優碼長是多少?這對於相比於我們[1/2, 1/4, 1/8, 1/8]信源,你能壓縮一個均勻信源多少說了什麼?