演算法設計與分析 哈夫曼編碼問題

2021-09-20 10:32:53 字數 1700 閱讀 3828

設需要編碼的字符集為

,它們出現的頻率為

,應用哈夫曼樹構造最短的不等長編碼方案。 (

1)證明哈夫曼樹滿足最優子結構性質; (

2)設計貪心演算法求解哈夫曼編碼方案; (

3)設計測試資料,寫出程式文件。

#include using namespace std;

#define maxcodelen 100 //最大字元編碼陣列長度

#define maxhaff 100 //最大哈夫曼節點結構體陣列個數

#define maxcode 100 //最大哈夫曼編碼結構體陣列的個數

#define maxweight 10000; //最大字元編碼權值

typedef struct huffmanhuffmannode;

typedef struct codehuffmancode;

huffmannode huffman[maxhaff];

huffmancode code[maxcode];

void createhuffman(int all)

/*提示使用者輸入資料*/

cout << "請依次輸入" << all << "個需要哈夫曼編碼的字元:";

for (int i = 0; i < all;i++)

cout << "請依次輸入"<> huffman[i].weight;

}//每次迴圈找出權值最小的兩個節點,生成新的父親節點。共需要 all - 1 次合併

int x1, x2, w1, w2; //w1、w2分別為最小的兩個節點

for (int i = 0; i < all - 1; ++i)

else if (huffman[j].parent == -1 && huffman[j].weight < w2)

} //將上面找到的最小權值節點合併成乙個新的父親節點

huffman[all + i].leftchild = x1;

huffman[all + i].rightchild = x2;

huffman[all + i].weight = w1 + w2;

huffman[x1].parent = all + i;

huffman[x2].parent = all + i; }}

//列印每個字元的哈夫曼編碼

void printcode(int all)

else

hcode.start--;

c = curparent;

curparent = huffman[c].parent;

} //把當前的葉子節點資訊儲存到編碼結構體裡面

演算法分析與設計 哈夫曼編碼

碼字 q表示字元a,b,c,d 同一序列 0100001 產生兩種解碼 產生歧義 01 00 001 010 00 01 二元字首碼 任何字元的 不能作為其他字元 的字首 利用二元字首碼解碼 從第乙個字元開始一次讀入每個字元 0或1 如果發現獨到的字串與某個碼字相等,就將這個子串譯作相應的碼字 然後...

哈夫曼樹與哈夫曼編碼

在一般的資料結構的書中,樹的那章後面,著者一般都會介紹一下哈夫曼 huffman 樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的乙個應用。哈夫曼編碼應用廣泛,如 jpeg中就應用了哈夫曼編碼。首先介紹什麼是哈夫曼樹。哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的...

哈夫曼樹與哈夫曼編碼

1.哈夫曼 huffman 編碼是哈夫曼樹的乙個應用。2.哈夫曼樹又稱為最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的相對值乘上其到根結點的路徑和權值。3.影象jpg就是利用了哈夫曼編碼。4.哈夫曼樹是最優二叉樹,子樹有左右次序之分。5.哈夫曼樹的形態不是唯...