哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。
輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點(葉節點權值不超過100,2<=n<=1000)。
輸出權值。示例1
複製
5複製1 2 2 5 9
37
#include #include #include using namespace std;
// 只有這樣,top出來的才不是max,而是min。不知道為什麼
//背過! vectorgreatervg vg vg vg vg vg vg
priority_queue,greater> pq;
int main()
int t;
for (int i = 1; i <= n; i++)
int weight = 0;
while(pq.size() != 1)
cout << weight << endl;
pq.pop();
}}
搬水果 計算哈夫曼樹最小WPL
在乙個果園裡,小明已經將所有的水果打了下來,並按水果的不同種類分成了若干堆,小明決定把所有的水果合成一堆。每一次合併,小明可以把兩堆水果合併到一起,消耗的體力等於兩堆水果的重量之和。當然經過 n 1 次合併之後,就變成一堆了。小明在合併水果時總共消耗的體力等於每次合併所耗體力之和。假定每個水果重量都...
哈夫曼樹及WPL計算的一種實現
主要思路寫在注釋裡了,用了兩個陣列,乙個作為堆,乙個作為儲存最後樹狀結構位址的陣列。我自己感覺可能有點複雜了,下次可以試試用結構體而不是二維陣列來實現同樣的功能。使用code block 17.12編譯 include include typedef struct haffmantreehaff t...
哈夫曼編碼 哈夫曼樹
1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....