哈夫曼演算法編碼原理與應用

2021-09-30 09:38:27 字數 1282 閱讀 8987

演算法原理:

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組成的資...