佇列是一種先進先出的結構,但優先順序佇列需要對後擠進去的資料進行排序,如果足夠大的話會排至隊首。它可以用來維護一堆資料中最大(最小)的n個資料,在這裡用大頂堆(完全二叉樹)來實現不停輸入整數時找出k個最小的數,通過與堆頂的比較,決定是否頂替堆頂並再次排序。這也是為了給kd樹求k近鄰做個鋪墊~
大頂堆在陣列中的表現是陣列下標n是下標2n與2n+1的父節點,同時2n的節點大於它的兄弟節點,因此在有資料頂替堆頂之後,再依次與其子節點比較,若有需要則替換。這樣每一次維護的平均時間複雜度是nlog(n)。
開心寫**:
#include using namespace std;
int *a;//初始化陣列
//交換位置
void swapdata(int a,int i,int j)
//維護大頂堆
void reorderqueue(int a,int n)
}void insertdata(int a,int insertint,int n,int k)
else if(n > k && insertint < a[1])
else
{ cout< k;
int *a = new int[k+1];
a[0]=-1;
cout
{ insertdata(a,insertint,n,k);
++n;
for(int i = 1;i < k+1;i++)
{cout通過堆排序,可以在消耗較少記憶體的情況下找到大量資料中最大(小)的若干資料。
資料結構 優先順序佇列
設初始序列為 49,38,65,97,76 大根堆 父節點的值大於或等於子節點的值 令數值越大優先順序越高 此時堆頂的元素為所有元素的最大值 97 小根堆 父節點的值小於或等於子節點的值 令數值越小優先順序越高 此時堆頂的元素為所有元素的最小值 38 將佇列中的所有元素按從大到小的數值輸出 分析 因...
資料結構 優先順序佇列
優先佇列的底層實現 二叉堆實現優先順序佇列 練習優先順序佇列也屬於佇列,因此也提供以下介面 利用二叉堆作為優先佇列的底層實現 可以通過comparator或comparable去自定義優先順序高低 利用二叉堆實現優先順序佇列。二叉堆實現優先順序佇列 author yusael public clas...
資料結構 優先順序佇列(堆)
一 堆 0 預備知識 使用陣列儲存二叉樹結構,方式即將二叉樹用層序遍歷方式放入陣列中。這種方式的主要用法就是堆的表示。在陣列中 左孩子 left 下標 2 parent 1 右孩子 right 下標 2 parent 2 雙親 parent 下標 child 1 2 1 堆的概念 堆在邏輯上是乙個完...