優先佇列 哈夫曼樹

2021-10-19 08:29:21 字數 883 閱讀 7155

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和的最小值。

輸入有多組資料。

每組第一行輸入乙個數n,接著輸入n個葉節點(葉節點權值不超過100,2<=n<=1000)。

輸出權值。
示例1

5  

1 2 2 5 9

37
使用優先佇列,可以高效地求出集合k中權值最小的兩個元素,不過此時需要的不是優先值最大的元素,而是優先值最小的元素。由於優先佇列預設採用的是優先順序高的先輸出,如果要反過來,那麼就需要重新定義優先佇列:priority_queue,greater> name

定義:priority_queue

type 就是資料型別,container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。stl裡面預設用的是vector),functional 就是比較的方式。

(公升序佇列,小頂堆 priority_queue ,greater> q; 

降序佇列,大頂堆 priority_queue ,less>q;

這裡所謂的公升序降序,是相對於用佇列輸出的結果來說的,與之前在陣列內用sort進行公升降序排序不大一樣)

#include#include#includeusing namespace std;

int main()

int answer = 0;

while(1cout<}

return 0;

}

題目30 哈夫曼樹 優先佇列

普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 first in,largest out 的行為特徵。首先要包含標頭檔案 include,他和queue不同的就在於我們可以自...

優先佇列 修理牧場 哈夫曼樹

主要還是要記錄一下這個優先佇列 定義 priority queue 公升序佇列 priority queue int,vector int greater int q 降序佇列 priority queue int,vector int less int q 和佇列基本操作相同 top 訪問隊頭元素...

配合優先佇列來實現哈夫曼樹

pragma once ifndef haffu h define haffu h define haffu typedef haffu char type char 哈夫曼樹結點的值域之一為 char 型別 表示出現的字元 haffu int type wight 哈夫曼樹結點的值域之一為 int...