今天上機課寫了這道題,已經是上上週留的作業了,有幾天沒刷演算法題了,哈弗曼編碼,貪心求解。。。
思路:就是建立乙個二維陣列,乙個儲存權值w,另乙個儲存父節點座標f,然後分別找到權值最小的兩個點,生成
乙個新的節點加入該陣列中,將這兩個最小的點從陣列中刪除一直這樣迴圈,直到找不到兩個沒有父節點的點為止,就
是說到最後只有乙個節點沒有父節點。注意輸入的字母只有乙個的情況,我第一次提交wa就是在這個地方錯誤的。
構造哈弗曼樹的方法是我從網上看來的,覺得這個方法挺好的,尋找兩個最小的值時可以用m1,m2來表示,遍歷數
組,然後就找出了最小的兩個數。乙個含有n個數的陣列構造哈弗曼樹後會變成2*n-1個節點
貼**:
#include#include#include#includetypedef struct
node;
node h[200];
char a[1000];
int b[40];
int huffmantree(int n)//構造哈弗曼樹
{ int i,j,m1,m2,x1,x2;//m1,m2分別表示當前陣列中最小的兩個權值,x1,x2分別表示權值最小的兩個值的標號
for(i=0; i
今天11級的學長回校了,開了個交流會,學長們都挺優秀的,有保研的,有考研的,有工作的,講的都挺 棒
的,這都是努力換來的結果,沒有
人可以隨隨便便成功,但是聽到他們講的考研經歷,a_jie似乎感受到了考研的 難
度,大概想著自己完全做不了這些事情,其實,考研並沒有想象的那麼難,最難的是自己能不能堅持,知不知道努 力,
學習這件事情,只要努力學還是蠻單的,真怕她不知道學習。。。只能祈禱這次她真的覺悟了。。。
poj 1521 Entropy(優先佇列)
哈弗曼編碼題 如果真的去構建一顆哈夫曼樹,那就太麻煩了 而且根據題目要求的輸出可以知道沒有必要構造乙個完整的樹 根據哈夫曼樹的特點,可知道可以用優先佇列實現功能 每次從佇列中取兩個最小的,將其和再放入佇列 一直重複這個操作知道佇列中只剩乙個元素 如下 include include include ...
哈夫曼編碼 POJ 1521
第一篇文章,格式無要求。哈夫曼編碼是一種根據詞頻變化的變長二進位制編碼方式,多用於壓縮演算法 實踐中用的也不多,雖然最優但比較古老了 作為乙個比較基礎的數學原理,其思想多用於計算機的演算法程式設計實踐中。詳見 哈弗曼編碼的實現 輸入 大寫字串 下劃線的集合,下劃線代表空格。輸出 ascii編碼所需2...
Poj 1521 ,哈夫曼編碼
這裡,網上有很多部落格都有寫,很多人沒有建樹,直接就是求一下這個哈夫曼編碼的長度,的確很巧妙,我也用的這個方法,但是,幾乎所有部落格都沒有解釋sum a b 這個的原因。也許是我太菜了吧,腦子轉不過來,好久才想通。比如說b,c,d出現2次,bc組成乙個新的節點,4 2 6,組成乙個新的節點6,6 a...