這裡,網上有很多部落格都有寫,很多人沒有建樹,直接就是求一下這個哈夫曼編碼的長度,的確很巧妙,我也用的這個方法,但是,幾乎所有部落格都沒有解釋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,然後分別找到權值最小的兩個點,生成 乙個新的節點加入該陣列中,將這兩個最小的點從陣列中刪除一直這樣迴圈,直到找不到兩個沒有父節點的點為止,就 ...