Poj 1521 ,哈夫曼編碼

2022-04-01 08:18:39 字數 692 閱讀 7372

這裡,網上有很多部落格都有寫,很多人沒有建樹,直接就是求一下這個哈夫曼編碼的長度,的確很巧妙,我也用的這個方法,但是,幾乎所有部落格都沒有解釋sum+=a+b;這個的原因。也許是我太菜了吧,腦子轉不過來,好久才想通。

比如說b,c,d出現2次,bc組成乙個新的節點,4+2=6,組成乙個新的節點6,6+a就是結果。

原因是:

sum+=2+2;

sum+=4+2;

sum+=6+5;

理由是,b,c分別編碼是3位,這裡依次加到了sum裡面,位數就是2*3;

**都差不多,主要是這兩種的轉換。

#include #include 

#include

using

namespace

std;

char str[1000

];int num[1000

];int

main()

int sum = 0

;

while(q.size()>1

)

if(sum==0

) sum =len;

printf(

"%d %d %.1f\n

",len*8,sum,double(8*len)/sum);

}return0;

}

哈夫曼編碼 POJ 1521

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

POJ1521 哈夫曼編碼,求最優WPL

poj1521 哈夫曼編碼 題目描述 輸入乙個字串,長度不超過 100,僅由大寫字母和下劃分組成。求用最好的字元編碼方式,令總長度最小。輸入 多組資料,每組資料在一行上輸入乙個字串,格式如前所述 當遇到end時,表示輸入結束 輸出 對應每個輸入,在一行上輸出 3個資訊 首先是每個字母按固定長度 8b...

poj 1521Entropy(哈弗曼編碼)

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