赫夫曼樹與赫夫曼編碼

2021-07-30 12:13:42 字數 1229 閱讀 5469

赫夫曼樹又稱為最優二叉樹。帶權路徑長度wpl最小的二叉樹稱為最優二叉樹。從樹根結點到該結點之間的路徑長度與該結點上權的乘積稱為結點的帶權路徑長度,樹中所有葉子結點的帶權路徑長度之和稱為該樹的帶權路徑長度(wpl),通常記為:

赫夫曼(huffman)樹的特徵

① 當葉子上的權值均相同時,完全二叉樹一定是最優二叉樹。否則完全二叉樹不一定是最優二叉樹。

② 在最優二叉樹中,權值越大的葉子離根越近;反之,權值越小的結點,其到根結點的路徑越長。

③ 最優二叉樹的形態不唯一,但wpl最小。 

如何構造赫夫曼樹?

(1)以權值分別為w1,w2...wn的n個結點,構成n棵二叉樹t1,t2,...tn並組成森林f=,其中每棵二叉樹 ti僅有乙個權值為 wi的根結點;

(2)在f中選取兩棵根結點權值最小的樹作為左右子樹構造一棵新二叉樹,並且置新二叉樹根結點權值為左右子樹上根結點的權值之和(根結點的權值=左右孩子權值之和,葉結點的權值= wi);

(3)從f中刪除這兩棵二叉樹,同時將新二叉樹加入到f中;

(4)重複(2)、(3)直到f中只含一棵二叉樹為止,這棵二叉樹就是huffman樹。

在電文編碼,壓縮編碼等演算法中,希望編碼總長盡可能短。如果對每個字元設計長度不等的編碼,且讓電文中出現次數較多的字元採用盡可能短的編碼,則總編碼長度便可減少。如果設計a、b、c、d的編碼分別為0、00、1、01,則電文『abaccda』的電文可以轉換為總長為9的字串『0000011010』,但是,這樣的電文無法翻譯,利用傳送過去的字串中前4個字元的字串『0000』就有多種譯法,或是『aaaa』,或『aba』,也可以是『bb』等。因此,若要設計長短不等的編碼,則必須是任一字元的編碼都不是另乙個字元的編碼的字首,這種編碼稱為字首編碼。

可以利用二叉樹來設計二進位制的字首編碼。如下圖。

如何得到使電文長度最短的二進位制字首編碼呢?設計電文長度最短的二進位制字首編碼即為以n種字元出現的頻率作權,設計一棵赫夫曼樹的問題,由此得到的二進位制字首編碼便稱為赫夫曼編碼。

構造赫夫曼樹和赫夫曼編碼的c語言描述:

赫夫曼樹與赫夫曼編碼

問題描述 利用huffman編碼進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編碼系統對待傳資料預先編碼,在接受端將傳來的資料編碼進行解碼 復原 對於有些通道,每端都需要乙個完整的編 解碼系統。試為這樣的資訊收發站編寫乙個huffman的編 解碼系統。給...

赫夫曼樹與赫夫曼編碼

時間限制 1 sec 記憶體限制 128 mb 輸入 輸入包含多組資料 不超過100組 每組資料第一行乙個整數n,表示字元個數。接下來n行,每行有乙個字元ch和乙個整數weight,表示字元ch所對應的權值,中間用空格隔開。輸入資料保證每組測試資料的字元不會重複。輸出 對於每組測試資料,按照輸入順序...

赫夫曼樹和赫夫曼編碼

赫夫曼樹 1 先把有權值的葉子節點按照從小到大的順序排成乙個有序序列,即 a 5 e 10 b 15 d 30 c 40 2 取前兩個權值最小的結點即a 5 和e 10 作為乙個新的結點n1的兩個子節點,結點權值較小的作為左結點,即a為左結點,e為右結點,n1的權值為兩個結點權值的和,即5 10 1...