DAA - Binary Heap
Istnieje kilka typów stert, jednak w tym rozdziale omówimy stertę binarną. ZAbinary heapto struktura danych, która wygląda podobnie do pełnego drzewa binarnego. Struktura danych sterty jest zgodna z właściwościami porządkowania omówionymi poniżej. Ogólnie sterta jest reprezentowana przez tablicę. W tym rozdziale przedstawiamy stertę wgH.
Ponieważ elementy sterty są przechowywane w tablicy, biorąc pod uwagę indeks początkowy jako 1, pozycja węzła macierzystego ith element można znaleźć pod adresem ⌊ i/2 ⌋. Lewe dziecko i prawe dzieckoith węzeł jest na pozycji 2i i 2i + 1.
Stertę binarną można dalej sklasyfikować jako plik max-heap lub a min-heap na podstawie właściwości zamawiającego.
Max-Heap
W tej stercie wartość klucza węzła jest większa lub równa wartości klucza najwyższego elementu potomnego.
W związku z tym, H[Parent(i)] ≥ H[i]
Min-Heap
W mean-heap wartość klucza węzła jest mniejsza lub równa wartości klucza najniższego elementu podrzędnego.
W związku z tym, H[Parent(i)] ≤ H[i]
W tym kontekście podstawowe operacje są pokazane poniżej w odniesieniu do Max-Heap. Wstawianie i usuwanie elementów ze stert i ze stert wymaga zmiany układu elementów. W związku z tym,Heapify funkcja musi zostać wywołana.
Reprezentacja tablicy
Kompletne drzewo binarne może być reprezentowane przez tablicę, przechowującą jego elementy przy użyciu przechodzenia do kolejności poziomów.
Rozważmy stertę (jak pokazano poniżej), która będzie reprezentowana przez tablicę H.
Biorąc pod uwagę indeks początkowy jako 0przy użyciu przechodzenia w kolejności poziomów elementy są przechowywane w tablicy w następujący sposób.
Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ... |
elements | 70 | 30 | 50 | 12 | 20 | 35 | 25 | 4 | 8 | ... |
W tym kontekście operacje na stercie są reprezentowane w odniesieniu do Max-Heap.
Aby znaleźć indeks rodzica elementu w index i, następujący algorytm Parent (numbers[], i) jest używany.
Algorithm: Parent (numbers[], i)
if i == 1
return NULL
else
[i / 2]
Indeks lewego dziecka elementu w index i można znaleźć za pomocą następującego algorytmu, Left-Child (numbers[], i).
Algorithm: Left-Child (numbers[], i)
If 2 * i ≤ heapsize
return [2 * i]
else
return NULL
Indeks prawego dziecka elementu o indeksie i można znaleźć za pomocą następującego algorytmu, Right-Child(numbers[], i).
Algorithm: Right-Child (numbers[], i)
if 2 * i < heapsize
return [2 * i + 1]
else
return NULL