資料結構day2 堆與優先佇列

2021-09-24 20:14:12 字數 1191 閱讀 1148

1.堆的簡介

堆是用完全二叉樹實現的,用於按某種優先順序存放資料;

最大值堆:每個結點的值大於或者等於其所有子結點的值;

最小值堆:每個結點的值都小於或者等於其所有子結點的值;

值得一提的是,堆結構中,任意兩個兄弟結點之間的大小並沒有必然聯絡。因此,對於給定的一組資料,堆並不是唯一的。

2.例項:最大值堆的實現,基於陣列的儲存

其中,堆的構造過程是將所有非葉結點從上往下調,且每次選擇與子樹根結點值較大的那個進行交換,這樣做的效率會更高;在下調的過程中,如果堆的深度為d,則約一半的結點深度為d-1,作為葉結點不必下調;約1/4的深度為d-2的結點可能下移一層,……按照此規律可以計算出,構造堆的過程元素移動的最大距離總數為o(n),所以其演算法時間複雜度為o(n)

而堆的插入過程則是從下往上移動,目的是為了保證完全二叉樹的形狀。

每次插入最長可能的移動距離是從底端到頂端,耗時o(logn)。

每次刪除採用的是置換操作,被置換的陣列尾部元素最大可能是到達根結點,因此再將其下調的的最長距離是o(logn)。

//最大值堆的實現(陣列儲存的完全二叉樹)

public class maxheap

public int heapsize()

public boolean isleaf(int pos)

else

return -1;

} public int rightchild(int pos)

else

return -1;

} public int parent(int pos)

else

return -1; }

public void buildheap()

} private void shiftdown(int pos)

}} }

public void insert(elem val)

else

} }//從堆中取出最大值

public elem removemax()

else

return heap[n];

} return null; }

public elem remove(int pos)

else

return heap[n];

} return null;

}}

資料結構 堆(優先佇列)

一種樹形資料結構,分大根堆,小根堆。大根堆 max heap 滿足所有父節點不小於其任意子節點。小根堆 min heap 滿足所有父節點不大於其任意子節點。在這裡,我們只考慮二叉堆。二叉堆是一棵完全二叉樹。solution 可見,每堆果子分別被合併了n 1次,n 2次,n 3次 1次 則數量越小的堆...

資料結構 優先佇列(堆)

什麼是堆 堆是一棵具有特定性質的二叉樹 堆的基本要求是堆中所有節點的值必須大於等於 或者小於等於 其孩子節點的值 堆應該是一棵完全二叉樹 堆的表示 由於堆在形式上是一棵完全二叉樹,所以用陣列不會浪費儲存空間 public class heap private int ary private int ...

資料結構 優先佇列(堆)

堆 堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質 結構性質 堆總是一棵完全樹。堆序性 堆中某個節點的值總是不大於或不小於其父節點的值 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。堆的意義就在於 最快的找到最大 最小值,在堆結構中插入乙個值重新構造堆結構,取走最...