poj 1521 Entropy(優先佇列)

2021-06-22 07:21:24 字數 563 閱讀 1711

哈弗曼編碼題

如果真的去構建一顆哈夫曼樹,那就太麻煩了

而且根據題目要求的輸出可以知道沒有必要構造乙個完整的樹

根據哈夫曼樹的特點,可知道可以用優先佇列實現功能

每次從佇列中取兩個最小的,將其和再放入佇列

一直重複這個操作知道佇列中只剩乙個元素

**如下:

#include #include #include #include #define maxn 10010

#define ll long long

using namespace std;

string str;

priority_queue, greater> q;

//greater為從小到大佇列

//less為從大到小佇列

int main(void) {

while(cin>>str && str!="end") {

sort(str.begin(), str.end());

char ch = str[0];

int times = 0;

for(int i=0; i

poj 1521Entropy(哈弗曼編碼)

今天上機課寫了這道題,已經是上上週留的作業了,有幾天沒刷演算法題了,哈弗曼編碼,貪心求解。思路 就是建立乙個二維陣列,乙個儲存權值w,另乙個儲存父節點座標f,然後分別找到權值最小的兩個點,生成 乙個新的節點加入該陣列中,將這兩個最小的點從陣列中刪除一直這樣迴圈,直到找不到兩個沒有父節點的點為止,就 ...

哈夫曼編碼 POJ 1521

第一篇文章,格式無要求。哈夫曼編碼是一種根據詞頻變化的變長二進位制編碼方式,多用於壓縮演算法 實踐中用的也不多,雖然最優但比較古老了 作為乙個比較基礎的數學原理,其思想多用於計算機的演算法程式設計實踐中。詳見 哈弗曼編碼的實現 輸入 大寫字串 下劃線的集合,下劃線代表空格。輸出 ascii編碼所需2...

Poj 1521 ,哈夫曼編碼

這裡,網上有很多部落格都有寫,很多人沒有建樹,直接就是求一下這個哈夫曼編碼的長度,的確很巧妙,我也用的這個方法,但是,幾乎所有部落格都沒有解釋sum a b 這個的原因。也許是我太菜了吧,腦子轉不過來,好久才想通。比如說b,c,d出現2次,bc組成乙個新的節點,4 2 6,組成乙個新的節點6,6 a...