優先順序佇列和堆的應用

2021-07-03 20:54:44 字數 848 閱讀 6439

優先順序佇列可以通過陣列自己維護優先順序,也可以用stl自帶的優先順序佇列priority_queue

#include

大根堆:priority_queueque 或 priority_queue, less> que

小根堆:priority_queue, greater> que

關於優先順序佇列的應用:

1. 取中位數

問題關鍵在於將所有資料儲存在兩個優先順序佇列中,若將所有資料按從小到大順序排列,較小的部分儲存在大根堆中,較大的部分儲存在小根堆中,永遠保持:大根堆(較小部分)的長度 = 小根堆(較大部分)的長度,或者大根堆(較小部分)的長度 = 小根堆(較大部分)的長度 + 1。從而使得大根堆的頂部是中位數(奇數個資料)或大根堆和小根堆的頂部的平均值是中位數(偶數個資料)。

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

class solution

}else

}} }

double getmedian()

private:

priority_queue, less> up; // big top

priority_queue, greater> down; // small top

};int main()

); for (int i = 0; i < vec.size(); ++i)

system("pause");

return 0;

}

結果:

堆的應用 優先順序佇列

標頭檔案 pragma once ifndef heap h define heap h typedef int datatype typedef int compare datatype left,datatype right typedef struct heap heap void creat...

堆的應用 優先順序佇列和堆排

優先順序佇列 就是佇列中的元素是有優先順序的,比如將優先順序最高的放在隊頭,最低的放在隊尾,那麼在對佇列進行操作時,如,出佇列,只能先出優先順序最高的,入佇列,也要根據元素的優先順序,將其放在對應的優先順序處。優先順序佇列的本質就是佇列裡面封裝了堆,具體 如下,下面 用到的堆可參考 pragma o...

堆應用 優先順序佇列(Priority Queue)

優先順序佇列的實現方法有很多種,這裡我們通過堆來構建 以降序,大堆為例 1.入佇列 通過尾插的方式入佇列,因為會破壞原有的堆結構,所以通過向上調整恢復堆結構。2.出佇列 若直接取出隊首元素的話,會影響後面元素的位置,所以我們將隊首元素與隊末元素交換,尾刪 size 再將交換後的0號元素進行向下調整,...