演算法分析與設計11最優字首碼

2021-10-06 05:45:45 字數 489 閱讀 1494

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

構造最優字首碼的貪心演算法就是哈夫曼演算法。將字符集作為森林,從中選出頻率最低的兩個字元,將這兩個字元的合併成一棵新樹,新樹的根節點權值為兩字元頻率之和,從森林中刪除這兩個字元,將新樹加入森林,重複直至全部合併為一顆樹,即為所求的哈夫曼樹。

void createhuffmantree(huffmantree t, int n1)

}

void charsethuffmanencoding(huffmantree t, huffmancode h, int n1)

strcpy_s(h[i].bits, &cd[start]);

}}

頻率排序 o(nlogn)

for 迴圈 o(n)

插入操作 o(logn)

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

作業11/11.1.c

演算法分析與設計 作業11 最優字首碼

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

作業11 最優字首碼

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

作業11 最優字首碼

哈夫曼編碼 兩個結構體,a用來儲存樹節點 b儲存節點鍊錶 輸入資料儲存到a結構體指標陣列,隨後按照權值排序 1 將陣列中的指標插入到b結構體組成的鍊錶中 2 取煉表前兩個節點的a元素,合併成新的乙個b,構成乙個新的b節點c,將c公升序插入到鍊錶中 3 煉表頭結點右移兩位 重複1,2,3操作直到鍊錶中...