赫夫曼樹及赫夫曼編碼

2021-10-24 12:43:57 字數 1507 閱讀 6392

typedef

struct

htnode,

*huffmantree;

typedef

char

** huffmancude;

status min

(huffmantree& ht,

int k)

}//選出最小元素後將該元素的parent值賦1,使得下一次比較將其排除在外;

ht[min]

.parent =1;

//剛開始編寫的時候這裡min直接寫成i,一直報錯

//仔細分析不難發現,為i時,min=i,但是後面i還會繼續迴圈改變,則min!=i;

return min;

}status min_2

(huffmantree& ht,

int k,

int&min1,

int&min2)

根據n個權值,構造成n棵二叉樹的集合f=,其中每棵二叉樹只有乙個權值為wi的根結點,沒有左、右子樹;

f中選取兩棵根結點權值最小的樹作為左、右子樹構造一棵新的二叉樹,且新的二叉樹根結點權值為其左、右子樹根結點的權值之和;

f中刪除這兩棵樹,同時將新得到的樹加入f中;

重複2、3,直到f只含一顆樹為止。

status creathuffmantree

(huffmantree& ht,

int*w,

int n);}

for(

;i < m +1;

++i);}

//構建赫夫曼樹

int s1, s2;

//用於記錄最小兩元素的序號

}

完整**

赫夫曼樹與赫夫曼編碼

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

赫夫曼樹和赫夫曼編碼

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

赫夫曼樹和赫夫曼編碼

include define maxsize 128 字元表 typedef struct table 哈夫曼樹節點 typedef struct hfmtree 哈夫曼編碼 typedef struct hfmcode hfmtree hdata 2 maxsize 1 hfmcode code ...