哈夫曼樹和哈夫曼編碼

葉結點帶權路徑長度最小的二叉樹
構造
給定n個權值分別為w1, w2, ...wn的結點,構造哈夫曼樹

  1. 將這n個結點分別作為n棵僅含一個結點的二叉樹,構成森林F
  2. 構造一個新結點,從F中選取兩棵根節(jié)點權值最小的樹,作為新結點的左右子樹,并將新結點的權值置為左右子樹上根結點的權值和
  3. 從F中刪除剛才選出的兩棵樹,同時將新的到的樹加入F
  4. 重復23直到F中只剩一棵樹
    構造過程中,需經過n-1次合并,每次合并會新建一個節(jié)點,共新建了n-1個結點,結點總數(shù)為2n-1

用最小堆來構造一個哈夫曼樹

typedef struct TreeNode *HuffmanTree;
srtuct TreeNode
{
    int Weight;
    HuffmanTree Left, Right;
}
HuffmanTree Huffman(MinHeap H)
{
    int i;
    HuffmanTree T;
    BuildMinHeap(H);  //按權值調整為最小堆
    for(i=1;i<H->Size;++i){
        T=malloc(sizeof(struct TreeNode));
        T->Left=DeleteMin(H);
        T->Right=DeleteMin(H);
        T->Weight=T->Left->Weight+T->Right->Weight;
        Insert(H, T);
    }
    T=DeleteMin(H);
    return T;
}

哈夫曼編碼
是一種可變長度編碼,對頻率高的字符賦予短編碼,頻率低的字符長編碼
前綴編碼:沒有一個編碼是另一個編碼的前綴

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容