演算法原理:
ht首先被提出來,是為了解決這樣的問題:對於n
種資料(比如
5種資料:a、
b、c、
d、e),在出現的頻率已
知的情況下(比如分別出現了3、
5、2、
6、4次),如何用不等長的
01串來分別表示它們,使
01串的總長度最短。
比如原始串:
abadbcbdabedbdedcede
對於這個問題,首先得到:任何乙個
01串都不能是其他
01串的字首
。也就是說,如果用
「
10」來表示a
,那麼其他
01串就不能以
「
10」開頭。
建立01
串的步驟如下:
首先找到出現最少的兩個資料(a、
c),分別以它們為左右子樹,
建立乙個二叉樹。並將它們出現次數之和作為根節點:
1) 5 5b 6d 4e
/ /
3a
2c然後從剩下的
4個數舉重找到兩個最小的,做同上的操作,知道只
剩乙個資料為止:
2) 5 9 6d
/ / / /
3a
2c5b 4e
3) 11 9
/ / / /
5 6d 5b 4e
/ /
3a
2c4) 20
/ /
11 9
/ / / /
5 6d 5b 4e
/ /
3a
2c最後從根節點開始,每個左子樹填
0,右子樹填1:
root
/ /
0 1
/ / / /
0 1d 0b 1e
/ /
0a
1c這樣每個資料對應的
01串就是從根節點到資料所在的葉子節點的路
徑:a: 000
b:
10 c: 001
d: 01
e: 11
這樣原始串
abadbcbdabedbdedcede
就成了:
000100000110001100100010110110011101001110111
壓縮:把
256個
ascii
碼看作256
種資料,分析它們出現的次數,建立ht,
得到256個01
串。用這
256個
01串去替換原來的字元並按照二進位制處理,
就可以得到壓縮後的檔案了。
哈夫曼演算法編碼原理與應用
概述 2 從左到右把上述頻率按從小到大的順序排列。3 每一次選出最小的兩個值,作為二叉樹的兩個葉子節點,將和作為它們的根節點,這兩個葉子節點不再參與比較,新的根節點參與比較。4 重複 3 直到最後得到和為1的根節點。將形成的二叉樹的左節點標0,右節點標1。把從最上面的根節點到最下面的葉子節點路徑中遇...
哈夫曼演算法編碼原理與應用
演算法原理 ht首先被提出來,是為了解決這樣的問題 對於n種資料 比如5種資料 a b c d e 在出現的頻率已知的情況下 比如分別出現了3 5 2 6 4次 如何用不等長的01串來分別表示它們,使01串的總長度最短。比如原始串 abadbcbdabedbdedcede 對於這個問題,首先得到 任...
哈夫曼編碼原理
哈弗曼編碼幾乎是所有壓縮演算法的基礎,其實這個演算法並不複雜,簡單的理解就是,如何用更短的bit來編碼資料。我們知道普通的編碼都是定長的,比如常用的ascii編碼,每個字元都是8個bit 字元編碼 a00101001 b00101010 c00101011 這樣,計算機就能很方便的把由0和1組成的資...