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

2021-10-24 13:48:29 字數 1035 閱讀 2186

哈夫曼編碼就是不斷地取數列中最小的兩個,合併,再新增到數列中,迴圈。利用了貪心的思想。在c++實現的時候可以用到優先佇列 priority_queue,這個方便的東西。

這個優先佇列,會自己進行排序,每次加進去乙個數,都會更新,降序排列或公升序排列。以公升序排列為例,更新過後的隊首元素就是數列中最小的數。

首先要用到頭檔案#include

定義優先佇列:priority_queue,greater>q;(這裡不需要用到標頭檔案)其中,greater是公升序(從小到大排序),如果是降序(從大到小)就要用less

要注意的是最後兩個尖括號不要挨著> >,因為>>是過載運算子,編譯器會報錯。

然後是一些優先佇列的基本操作:

priority_queue<

int,vector<

int>

,greater<

int>

>q;

//定義優先佇列

q.push

(x);

//將x加入到優先佇列中

t=q.

top();

//返回隊首元素

q.pop()

;//彈出隊首元素

l=q.

size()

;//返回佇列長度(元素個數)

b=q.

empty()

;//判斷佇列是否為空,為空返回1,否則返回0

然後就可以上**了:

#include

#include

using

namespace std;

intmain()

int ans=0;

while

(q.size()

>1)

cout

return0;

}

**很短,很簡單。

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

構造哈夫曼樹及輸出哈夫曼編碼,優先佇列構造最小堆實現 windows下輸入結束方法 enter,ctrl z,enter 執行結果如下 遍歷哈夫曼樹,列印哈夫曼編碼 void createhuffcode treenode root 如果是葉子結點,列印 if root lchild root rc...

優先佇列實現 哈夫曼編碼

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

哈夫曼編碼C 實現(優先佇列)(map對映)

哈夫曼樹是帶權路徑最短的最優二叉樹,即權值越小的結點里根節點越遠反之則越近。借助優先佇列,初始時,將所有的結點壓入優先佇列,權值越小優先順序越高,每次取兩個優先順序最小的結點,將其作為新節點左右孩子節點,再將新節點壓入優先佇列,再次選取兩個權值最小的結點,直到優先佇列中只剩下乙個結點,此節點作為根節...