演算法 作業11 最優字首編碼(哈夫曼樹及編碼)

2021-10-06 02:06:29 字數 646 閱讀 5362

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

哈夫曼演算法:

1)初始化n個單節點的樹,每個字元的概率記在樹的根中,用作樹的權重。

2)找到兩棵權重最小的樹,把它們作為新樹中的左右子樹,並把權重和記作新的權重記錄在新樹的根中。

3)重複第二步直到只剩一顆單獨的樹。

huffman演算法:

輸入:c=字符集,每個字元的頻率f(xi),i=1,2,…,n.

輸出:q

1.n<-|c|

2.q<-c //按頻率遞增構成佇列 q

3.for i<-1 to n-1 do

4. z<-allocate-node()

5. z.left<-q中最小元 //取出q中最小元作為z的左兒子

6. z.right<-q中最小元 //取出q中最小元作為z的右兒子

7. f(z)<-f(x)+f(y)

8. insert(q,z)

9.return q

o(nlogn)頻率排序;

for 迴圈:o(n);

插入操作:o(logn)

演算法時間複雜度是 o(nlogn)

github原始碼

作業11 哈夫曼編碼

給定字符集c 和每個字元的頻率f x i 求關於c的乙個最優字首碼。陣列hufftree初始化,所有元素結點的雙親 左右孩子都置為null 陣列hufftree的前n個元素的權值置給定權值ptrarr n 進行n 1次合併 3.1 在二叉樹集合中選取兩個權值最小的根結點,其下標分別為k1,k2 3....

哈夫曼編碼最優字首碼的貪心演算法

哈夫曼編碼是廣泛地用於資料檔案壓縮的十分有效的編碼方法。其壓縮率通常在20 90 之間。哈夫曼編碼演算法用字元在檔案 現的頻率表來建立乙個用0,1串表示各字元的最優表示方式。字首碼 對每乙個字元規定乙個0,1串作為其 並要求任一字元的 都不是其他字元 的字首。這種編碼稱為字首碼。編碼的字首性質可以使...

演算法 哈夫曼編碼

計算機中使用二進位制編碼字元 哈夫曼編碼是通過構造哈夫曼樹得到的,哈夫曼樹是通過貪心演算法得到的 貪心演算法構造哈夫曼樹 將字元出現的次數作為哈夫曼樹的權值,按照貪心演算法,選擇權值最小的兩個結點,成為乙個數的左右結點 左右子結點的權值變為子樹根的權值 然後在餘下的結點中遞迴選用最小的兩個結點 根據...