最優字首碼問題

2021-10-06 06:46:01 字數 864 閱讀 7677

1.問題

給定字符集c=和每個字符集的頻率f(xi),求關於c的乙個最優字首碼。

2.解析

構造最優字首碼的貪心演算法就是哈夫曼演算法(huffman)

構建哈夫曼樹的過程

1.按照貪心演算法每次找權值最小(即值最小)的兩個數,構成孩子結點,並將這兩個資料排除出這一堆資料之外

2.由於哈弗曼樹的資料全在葉子結點,所以把上述權值最小的兩個資料構成父結點,然後再將父結點的權值放回上述資料,返回第一步,重複上述過程,直到所有的資料都變成哈夫曼樹的葉子結點

例項:

此為哈夫曼數的構造方法,若想實現最優字首碼構造,將資料替換為所需編碼的資料在密文**現的頻率

從葉節點往根掃瞄,若為左子樹則標記為0,為右子樹則標記為1。

如圖:

3.設計

1.   char ch = fgetc(fout)

;while

(ch != eof)

//獲取資料出現的頻率

2. void generatehuffmancode(node* root)

//構建哈夫曼樹

4.分析o(nlogn)頻率排序;for迴圈o(n),插入操作o(logn),演算法時間複雜度o(nlogn).

5.源**

最優字首碼問題

構造最優字首碼的貪心演算法就是哈夫曼演算法 哈夫曼編碼 對於一顆具有n個葉子的哈夫曼樹,若對樹中的每個左分支賦予0,右分支賦予1,則從根到每個葉子的路徑上,各分支的賦值分別構成乙個二進位制串,該二進位制串就成為哈夫曼編碼。哈夫曼樹滿足兩條性質 性質證明如下 參考自 嚴蔚敏 資料結構教材 q c 頻率...

最優字首碼解析

給定字符集c x1,x2,xn 和每個字的頻率f xi 求關於c的乙個最優字首碼解析 哈夫曼演算法 根據哈夫曼樹求曼編碼表 int c,p char cd n 1 臨時存放編碼 int start 指示編碼在cd中的起始位置 cd n 0 編碼結束符 getchar for int i 0 i n ...

作業11 最優字首碼

問題 給定字符集 c 和每個字元的頻率f xi 求關於 c 的乙個最優字首碼。構造最優字首碼的貪心演算法就是哈夫曼演算法 huffman 哈夫曼樹的基本思想 選擇權值小的葉子離根距離遠些。實現 第一步 以每個結點作為根,構造只有乙個根結點的n棵二叉樹,根的權值就是結點的權。第二步 在所有二叉樹中選擇...