演算法原理:
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 2c 5b 4e
3) 11 9
/ \ / \
5 6d 5b 4e
/ \
3a 2c
4) 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串去替換原來的字元並按照二進位制處理,
就可以得到壓縮後的檔案了。
哈夫曼演算法編碼原理與應用
演算法原理 ht首先被提出來,是為了解決這樣的問題 對於n 種資料 比如 5種資料 a b c d e 在出現的頻率已 知的情況下 比如分別出現了3 5 2 6 4次 如何用不等長的 01串來分別表示它們,使 01串的總長度最短。比如原始串 abadbcbdabedbdedcede 對於這個問題,首...
哈夫曼演算法編碼原理與應用
概述 2 從左到右把上述頻率按從小到大的順序排列。3 每一次選出最小的兩個值,作為二叉樹的兩個葉子節點,將和作為它們的根節點,這兩個葉子節點不再參與比較,新的根節點參與比較。4 重複 3 直到最後得到和為1的根節點。將形成的二叉樹的左節點標0,右節點標1。把從最上面的根節點到最下面的葉子節點路徑中遇...
哈夫曼編碼原理
哈弗曼編碼幾乎是所有壓縮演算法的基礎,其實這個演算法並不複雜,簡單的理解就是,如何用更短的bit來編碼資料。我們知道普通的編碼都是定長的,比如常用的ascii編碼,每個字元都是8個bit 字元編碼 a00101001 b00101010 c00101011 這樣,計算機就能很方便的把由0和1組成的資...