什麼赫夫曼編碼,我想知道下它的原理

時間 2021-09-06 02:19:38

1樓:

1、是一種利用二叉樹實現的編碼原理

霍夫曼(huffman)編碼原理

霍夫曼(huffman)編碼是2023年為文字檔案而建立,是一種統計編碼。屬於無失真壓縮編碼。

霍夫曼編碼的碼長是變化的,對於出現頻率高的資訊,編碼的長度較短;而對於出現頻率低的資訊,編碼長度較長。這樣,處理全部資訊的總碼長一定小於實際資訊的符號長度。

步驟進行:

l)將訊號源的符號按照出現概率遞減的順序排列。

2)將兩個最小出現概率進行合併相加,得到的結果作為新符號的出現概率。

3)重複進行步驟1和2直到概率相加的結果等於1為止。

4)在合併運算時,概率大的符號用編碼0表示,概率小的符號用編碼1表示。

5)記錄下概率為1處到當前訊號源符號之間的0,l序列,從而得到每個符號的編碼。

例: 設訊號源為 s={s1, s2, s3, s4, s5}

對應的概率為p={0.25,0.22,0.20, 0.18,0.15}。

根據字元出現的概率來構造平均長度最短的異字頭碼字。

霍未曼編碼通常採用兩次掃瞄的辦法,第一次掃瞄得到統計結果,第二次掃瞄進行編碼。

霍夫曼編碼具有一些明顯的特點:

1) 編出來的碼都是異字頭碼,保證了碼的唯一可譯性。

2) 由於編碼長度可變。因此解碼時間較長,使得霍夫曼編碼的壓縮與還原相當費時。

3) 編碼長度不統一,硬體實現有難度。

4) 對不同訊號源的編碼效率不同,當訊號源的符號概率為2的負冪次方時,達到100%的編碼效率;若訊號源符號的概率相等,則編碼效率最低。

5) 由於"0"與"1"的指定是任意的,故由上述過程編出的最佳碼不是唯一的,但其平均碼長是一樣的,故不影響編碼效率與資料壓縮效能

2、都差不多,個人感覺c++更好學

2樓:匿名使用者

赫夫曼編碼

赫夫曼(huffman)在2023年提出了另一種編碼方法,即從下到上的編碼方法。現仍以乙個具體的例子說明它的編碼步驟:

(1) 初始化,根據符號概率的大小按由大到小順序對符號進行排序,如表4-03和圖4-02所示。

(2) 把概率最小的兩個符號組成乙個節點,如圖4-02中的d和e組成節點p1。

(3) 重複步驟2,得到節點p2、p3和p4,形成一棵「樹」,其中的p4稱為根節點。

(4) 從根節點p4開始到相應於每個符號的「樹葉」,從上到下標上「0」(上枝)或者「1」(下枝),至於哪個為「1」哪個為「0」則無關緊要,最後的結果僅僅是分配的**不同,而**的平均長度是相同的。

(5) 從根節點p4開始順著樹枝到每個葉子分別寫出每個符號的**,如表4-03所示。

(6) 按照仙農理論,這幅影象的熵為

h(s)=(15/39)×log2(39/15) + (7/39)×log2(39/7) + … + (5/39)×log2(39/5)

=2.1859

壓縮比1.37:1。

表4-03 赫夫曼編碼舉例

符號 出現的次數(pi) log2(1/pi) 分配的** 需要的位數

a 15(0.3846) 1.38 0 15

b 7(0.1795) 2.48 100 21

c 6(0.1538) 2.70 101 18

d 6(0.1538) 2.70 110 18

e 5(0.1282) 2.96 111 15

圖4-02 赫夫曼編碼方法

赫夫曼碼的碼長雖然是可變的,但卻不需要另外附加同步**。例如,碼串中的第1位為0,那末肯定是符號a,因為表示其他符號的**沒有乙個是以0開始的,因此下一位就表示下乙個符號**的第1位。同樣,如果出現「110」,那麼它就代表符號d。

如果事先編寫出一本解釋各種**意義的「詞典」,即碼簿,那麼就可以根據碼簿乙個碼乙個碼地依次進行解碼。

採用赫夫曼編碼時有兩個問題值得注意:①赫夫曼碼沒有錯誤保護功能,在解碼時,如果碼串中沒有錯誤,那麼就能乙個接乙個地正確譯出**。但如果碼串中有錯誤,哪怕僅僅是1位出現錯誤,不但這個碼本身譯錯,更糟糕的是一錯一大串,全亂了套,這種現象稱為錯誤傳播(error propagation)。

計算機對這種錯誤也無能為力,說不出錯在**,更談不上去糾正它。②赫夫曼碼是可變長度碼,因此很難隨意查詢或呼叫壓縮檔案中間的內容,然後再解碼,這就需要在儲存**之前加以考慮。儘管如此,赫夫曼碼還是得到廣泛應用。

與仙農-范諾編碼相比,這兩種方法都自含同步碼,在編碼之後的碼串中都不須要另外新增標記符號,即在解碼時分割符號的特殊**。此外,赫夫曼編碼方法的編碼效率比仙農-范諾編碼效率高一些。請讀者自行驗證。

3樓:匿名使用者

vc=visual c++

哈夫曼編碼的原理是什麼?

4樓:匿名使用者

霍夫曼(huffman)編碼bai屬於碼詞長度可變的編du碼類,是zhi

霍夫曼在2023年提出的一種編dao碼方法,即從內下到上的編容碼方法。同其他碼詞長度可變的編碼一樣,可區別的不同碼詞的生成是基於不同符號出現的不同概率。

赫夫曼碼的碼字(各符號的**)是異前置碼字,即任一碼字不會是另一碼字的前面部分,這使各碼字可以連在一起傳送,中間不需另加隔離符號,只要傳送時不出錯,收端仍可分離各個碼字,不致混淆。

赫夫曼編碼的具體方法:先按出現的概率大小排隊,把兩個最小的概率相加,作為新的概率 和剩餘的概率重新排隊,再把最小的兩個概率相加,再重新排隊,直到最後變成1。每次相 加時都將「0」和「1」賦與相加的兩個概率,讀出時由該符號開始一直走到最後的「1」, 將路線上所遇到的「0」和「1」按最低位到最高位的順序排好。

哈夫曼編碼是上個世紀五十年代由哈夫曼教授研製開發的,它借助了資料結構當中的樹型結構,在哈夫曼演算法的支援下構造出一棵最優二叉樹,我們把這類樹命名為哈夫曼樹.因此,準確地說,哈夫曼編碼是在哈夫曼樹的基礎之上構造出來的一種編碼形式,它的本身有著非常廣泛的應用。

哈夫曼編碼的工作原理,效能,應用 30

哈夫曼編碼原理

5樓:喵喵喵啊

赫夫曼碼的碼字(各符號的**)是異前置碼字,即任一碼字不會是另一碼字的前面部分,這使各碼字可以連在一起傳送,中間不需另加隔離符號,只要傳送時不出錯,收端仍可分離各個碼字,不致混淆。

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼(vlc)的一種。huffman於2023年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼。

擴充套件資料

赫夫曼編碼的具體方法:先按出現的概率大小排隊,把兩個最小的概率相加,作為新的概率

和剩餘的概率重新排隊,再把最小的兩個概率相加,再重新排隊,直到最後變成1。

每次相加時都將「0」和「1」賦與相加的兩個概率,讀出時由該符號開始一直走到最後的「1」,

將路線上所遇到的「0」和「1」按最低位到最高位的順序排好,就是該符號的赫夫曼編碼。

例如a7從左至右,由u至u″″,其碼字為1000;

a6按路線將所遇到的「0」和「1」按最低位到最高位的順序排好,其碼字為1001…

用赫夫曼編碼所得的平均位元率為:σ碼長×出現概率

上例為:0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4=2.72 bit

可以算出本例的信源熵為2.61bit,二者已經是很接近了。

6樓:我要換名字好嗎

霍夫曼(huffman)編碼屬於碼詞長度可變的編碼類,是霍夫曼在2023年提出的一種編碼方法,即從下到上的編碼方法。同其他碼詞長度可變的編碼一樣,可區別的不同碼詞的生成是基於不同符號出現的不同概率。生成霍夫曼編碼演算法基於一種稱為「編碼樹」(coding tree)的技術。

演算法步驟如下:

(1)初始化,根據符號概率的大小按由大到小順序對符號進行排序。

(2)把概率最小的兩個符號組成乙個新符號(節點),即新符號的概率等於這兩個符號概率之和。

(3)重複第2步,直到形成乙個符號為止(樹),其概率最後等於1。

(4)從編碼樹的根開始回溯到原始的符號,並將每一下分枝賦值為1,上分枝賦值為0。

以下這個簡單例子說明了這一過程。

1).字母a,b,c,d,e已被編碼,相應的出現概率如下:

p(a)=0.16, p(b)=0.51, p(c)=0.09, p(d)=0.13, p(e)=0.11

2).c和e概率最小,被排在第一棵二叉樹中作為樹葉。它們的根節點ce的組合概率為0.20。

從ce到c的一邊被標記為1,從ce到e的一邊被標記為0。這種標記是強制性的。所以,不同的哈夫曼編碼可能由相同的資料產生。

3).各節點相應的概率如下:

p(a)=0.16, p(b)=0.51, p(ce)=0.20, p(d)=0.13

d和a兩個節點的概率最小。這兩個節點作為葉子組合成一棵新的二叉樹。根節點ad的組合概率為0.29。由ad到a的一邊標記為1,由ad到d的一邊標記為0。

如果不同的二叉樹的根節點有相同的概率,那麼具有從根到節點最短的最大路徑的二叉樹應先生成。這樣能保持編碼的長度基本穩定。

4).剩下節點的概率如下:

p(ad)=0.29, p(b)=0.51, p(ce)=0.20

ad和ce兩節點的概率最小。它們生成一棵二叉樹。其根節點adce的組合概率為0.49。由adce到ad一邊標記為0,由adce到ce的一邊標記為1。

5).剩下兩個節點相應的概率如下:

p(adce)=0.49, p(b)=0.51

它們生成最後一棵根節點為adceb的二叉樹。由adceb到b的一邊記為1,由adceb到adce的一邊記為0。

6).圖03-02-2為霍夫曼編碼。編碼結果被存放在乙個表中:

w(a)=001, w(b)=1, w(c)=011, w(d)=000, w(e)=010

圖03-02-2 霍夫曼編碼例

霍夫曼編碼器的編碼過程可用例子演示和解釋。

下面是另乙個霍夫曼編碼例子。假定要編碼的文字是:

"example of huffman code"

首先,計算文字中符號出現的概率(表03-02-2)。

表03-02-2 符號在文字中出現的概率

符號概率

e2/25

x1/25

a2/25

m2/25

p1/25

l1/25

o2/25

f2/25

h1/25

u1/25

c1/25

d1/25

i1/25

n2/25

g1/25

空格3/25

最後得到圖03-02-3所示的編碼樹。

圖03-02-3 霍夫曼編碼樹

在霍夫曼編碼理論的基礎上發展了一些改進的編碼演算法。其中一種稱為自適應霍夫曼編碼(adaptive huffman code)。這種方案能夠根據符號概率的變化動態地改變碼詞,產生的**比原始霍夫曼編碼更有效。

另一種稱為擴充套件的霍夫曼編碼(extended huffman code)允許編碼符號組而不是單個符號。

同夏農-范諾編碼一樣,霍夫曼碼的碼長雖然是可變的,但卻不需要另外附加同步**。這是因為這兩種方法都自含同步碼,在編碼之後的碼串中都不需要另外新增標記符號,即在解碼時分割符號的特殊**。當然,霍夫曼編碼方法的編碼效率比夏農-范諾編碼效率高一些。

採用霍夫曼編碼時有兩個問題值得注意:①霍夫曼碼沒有錯誤保護功能,在解碼時,如果碼串中沒有錯誤,那麼就能乙個接乙個地正確譯出**。但如果碼串中有錯誤,那怕僅僅是1位出現錯誤,也會引起一連串的錯誤,這種現象稱為錯誤傳播(error propagation)。

計算機對這種錯誤也無能為力,說不出錯在**,更談不上去糾正它。②霍夫曼碼是可變長度碼,因此很難隨意查詢或呼叫壓縮檔案中間的內容,然後再解碼,這就需要在儲存**之前加以考慮。儘管如此,霍夫曼碼還是得到廣泛應用。

原來揚州隸屬姜堰,分劃給泰州。我想知道什麼原因

芩蛆 你弄錯了,原來泰州隸屬揚州只是揚州的乙個縣,姜堰以前是泰州的乙個縣級市,現在變為姜堰區了 ps雙子 關你屁事啊。不是為了經濟發展誰閒著無聊搞這個 泰州和揚州為什麼會分 更上百層樓 泰州和揚州本來就是兩個不同的行政區劃。但是兩者同為江蘇省地級市,長江三角洲中心區27城之一。泰州所轄縣市 區 全部...

我參加了速讀培訓班,我想知道它的原理

寧錯過不做錯 速讀的基本原理 人的大腦分為左右兩部分,各自分管並對不同的資訊 內容處理 其中右腦主要是對圖形和影象進行記憶和加工,而左腦主要是處理諸 如邏輯 數字 文字等非形象化的資訊。科學研究已經證明 人類進行傳統閱讀 時,主要使用左腦的功能 而在採用 速讀 方式閱讀時,則充分調動了是左右 腦的功...

前輩,我想知道自考它到底是怎麼樣的?什麼流程,自考的大學是自己選的嗎?不同大學是不是難度不一樣

再造丸 自考大學是沒有年齡限制的 滄海浩波 一 自學考試報名流程 1 選擇好想學的專業 2 你可以登入當地的教育考試網或自學考試網查詢報考簡章欄目下 什麼時間報名,需要考哪些課程 本次開考那幾門課 3 自考大專沒有學歷限制,自考本科的條件是要有專科學歷,大專和本科都沒有時間 年齡 戶籍的限制。每次考...