優先佇列實現哈夫曼編碼(貪心法)

2021-08-08 00:11:54 字數 952 閱讀 3609

構造哈夫曼樹及輸出哈夫曼編碼,優先佇列構造最小堆實現

windows下輸入結束方法:enter,ctrl+z,enter

執行結果如下:

//遍歷哈夫曼樹,列印哈夫曼編碼

void createhuffcode(treenode * root)

//如果是葉子結點,列印

if (!(root->lchild) && !(root->rchild))

if (root->rchild)

}//自定義比較體

struct cmp

};//最小堆

priority_queue < treenode*, vector

, cmp > pque;

void createhufftree()

//標準輸入輸出流讀寫

char ch_temp;

int freq_temp;

while (cin>>ch_temp >> freq_temp)

for (int i = 0; i < vch.size(); i++)

//依次找出權值最小的兩個結點

while (pque.size() != 1)

createhuffcode(pque.top());

}int main()

優先佇列實現 哈夫曼編碼

用到了優先佇列的知識點,還有dfs演算法。優先佇列主要是為了查詢最小權重樹的時候方便查詢,不用耗費很多的時間從已經產生的樹種依次查詢,具體實現看 dfs主要是用來遍歷樹從而拿到每個字元的編碼,具體實現看 include include include includeusing namespace s...

哈夫曼編碼的C 實現(優先佇列 貪心)

哈夫曼編碼就是不斷地取數列中最小的兩個,合併,再新增到數列中,迴圈。利用了貪心的思想。在c 實現的時候可以用到優先佇列 priority queue,這個方便的東西。這個優先佇列,會自己進行排序,每次加進去乙個數,都會更新,降序排列或公升序排列。以公升序排列為例,更新過後的隊首元素就是數列中最小的數...

貪心 哈夫曼編碼 哈夫曼樹

解決問題 哈夫曼樹 眾所周知,計算機以01串來儲存和運算。所以,如果我們想要存乙個字元或漢字,例如a,計算機會將它變為乙個01串,這個串就是a的編碼。如果我們輸入了乙個詞 cat。如果a的編碼是1,c的編碼是10,t的編碼是11,那麼 cat 對應的編碼就是 10111 好了,那麼問題來了 1011...