hdu1053哈夫曼樹的妙用

2021-08-22 11:31:39 字數 893 閱讀 2597

acm小菜鳥的日常更新啊~~~

題目鏈結

題目比較長,大致意思是說乙個英文本母佔四個位元組,乙個二進位制數佔乙個位元組,讓你求如果乙個字串用哈夫曼樹表示所需的位元組數。

sample input

aaaaabcd

the_cat_in_the_hat

endsample output

64 13 4.9

144 51 2.8

aaaaabcd,若以這個字串建哈夫曼樹

字串a出現了五次,b,c,d各出現了一次

b,c,d出現次數最少,放在最下面,依次類推

圖中2代表孩子節點1與1的和,該哈夫曼樹的權值為2+3+8=13;

可用優先佇列實現,每次選出佇列開頭的兩個元素(最小元素),

出佇列,用ans加上最小元素的和,再將兩最小元素的和放入佇列中。

如果你以為這樣就可以ac的話,那麼,你錯了!!!

還有一種邊界條件!!!!!!!!!!整個字串只出現一種字元的情況下,沒有出隊和入隊,也無需建哈夫曼樹,此時權值為字串的長度,權重為8.0

#include  #include  #include  #include  #include  #include  using  namespace  std;

int main()

int ans = 0;

while(q.size()!=1)

printf("%d %d %.1f\n",s.length()*8,ans,(double)s.length()*8/ans);}}

return 0;

}

hdu1053(哈夫曼編碼)

題意是,給出一排字串,要求求出字元的8位編碼的長度,哈夫曼編碼值,以及之間的比值 因為僅僅只要求求出哈夫曼編碼值,所以不用建立哈夫曼樹,可以建立優先佇列,只要將每次最小的 出隊的兩個元素合成乙個新的大數,然後放進優先佇列中,直到只剩下乙個元素為止,那個元素就是哈夫曼編碼值。注意只有一種字元的情況 a...

HDU 1053 Entropy 哈夫曼樹

題意 根據哈夫曼編碼原則壓縮乙個字串,問壓縮後的大小和壓縮比。思路 就是寫一棵哈夫曼樹。ps 第一次寫哈夫曼樹,寫得好醜 problem hdu 1053 author nmfloat include include include include include include include i...

HDU1053 Entropy 哈夫曼樹

認真讀題,別怕題長,此題考查的就是哈夫曼樹並求出最小編碼值,注意每一次要將陣列清0,否則會出錯!ac include include using namespace std define m 1000000 struct node ha 100 int main int k 0 for i 0 i ...