Implementer Max Heap i Java: En komplett guide


Implementering av Max Heap Datastruktur i Java

Introduksjon

En maks-heap er en komplett binær trestruktur der hver node er større enn eller lik sine barn. Denne egenskapen sørger for at det største elementet i heapen alltid er lagret i rot-noden. Maks-heaps brukes ofte i prioritetskøer, der elementene nås i synkende rekkefølge etter verdiene sine.

I Java kan en maks-heap implementeres ved hjelp av en array. Arrayen representerer heapen som et komplett binært tre, der venstre og høyre barn av en node lagres ved indeksene 2*i+1 og 2*i+2, henholdsvis. Rot-noden lagres ved indeks 0.

Implementasjon

For å implementere en maks-heap i Java, kan vi følge disse trinnene:

1. Lag en array for å lagre heapen.
2. Initialiser heapen med de gitte elementene.
3. Bygg maks-heapen ved å kalle buildMaxHeap() metoden.
4. For å sette inn et nytt element i heapen, kall insert() metoden.
5. For å trekke ut det maksimale elementet fra heapen, kall extractMax() metoden.

Bygg Maks Heap

buildMaxHeap()-metoden tar en array som representerer en heap og bygger en maks-heap fra den. Metoden fungerer ved rekursivt å kalle seg selv på venstre og høyre subtrær til rot-noden.


public void buildMaxHeap() {
    for (int i = parent(size() - 1); i >= 0; i--) {
        maxHeapify(i);
    }
}
  

Sett Inn

insert()-metoden tar et element og setter det inn i heapen. Metoden legger først elementet til slutten av arrayen og kaller deretter maxHeapify()-metoden for å gjenopprette maks-heap egenskapen.


public void insert(int element) {
    size++;
    heap[size - 1] = element;
    maxHeapify(size - 1);
}
  

Trekk Ut Maks

extractMax()-metoden trekker ut det maksimale elementet fra heapen. Metoden bytter først rot-noden med den siste noden i arrayen og kaller deretter maxHeapify()-metoden på rot-noden.


public int extractMax() {
    int max = heap[0];
    heap[0] = heap[size - 1];
    size--;
    maxHeapify(0);
    return max;
}
  

Maks Heapify

maxHeapify()-metoden tar en indeks og gjenoppretter maks-heap egenskapen for subtreet med roten ved den indeksen. Metoden fungerer ved rekursivt å kalle seg selv på venstre og høyre subtrær til rot-noden og deretter bytte rot-noden med den største av barna.


private void maxHeapify(int i) {
    int left = left(i);
    int right = right(i);
    int largest = i;
    if (left < size && heap[left] > heap[i]) {
        largest = left;
    }
    if (right < size && heap[right] > heap[largest]) {
        largest = right;
    }
    if (largest != i) {
        swap(i, largest);
        maxHeapify(largest);
    }
}
  

Bruksområder

Maks-heaps brukes i en rekke applikasjoner, inkludert:

  • Prioritetskøer
  • Heap-sortering
  • Utvalgsalgoritme
  • Dijkstras algoritme
  • Prims algoritme

Konklusjon

Maks-heaps er en allsidig og effektiv datastruktur som kan brukes i en rekke applikasjoner. I Java kan maks-heaps implementeres ved hjelp av en array og noen få enkle metoder. Ved å forstå implementeringen av maks-heaps, kan du bruke dem til å løse en rekke problemer effektivt.

Ofte Stilte Spørsmål

1. Hva er en maks-heap?

En maks-heap er en komplett binær trestruktur der hver node er større enn eller lik sine barn.

2. Hvordan implementeres en maks-heap i Java?

En maks-heap kan implementeres i Java ved hjelp av en array. Arrayen representerer heapen som et komplett binært tre, der venstre og høyre barn av en node lagres ved indeksene 2*i+1 og 2*i+2, henholdsvis. Rot-noden lagres ved indeks 0.

3. Hvordan bygger jeg en maks-heap fra en array?

Du kan bygge en maks-heap fra en array ved å kalle buildMaxHeap()-metoden. buildMaxHeap()-metoden tar en array som representerer en heap og bygger en maks-heap fra den. Metoden fungerer ved rekursivt å kalle seg selv på venstre og høyre subtrær til rot-noden.

4. Hvordan setter jeg inn et element i en maks-heap?

Du kan sette inn et element i en maks-heap ved å kalle insert()-metoden. insert()-metoden tar et element og setter det inn i heapen. Metoden legger først elementet til slutten av arrayen og kaller deretter maxHeapify()-metoden for å gjenopprette maks-heap egenskapen.

5. Hvordan trekker jeg ut det maksimale elementet fra en maks-heap?

Du kan trekke ut det maksimale elementet fra en maks-heap ved å kalle extractMax()-metoden. extractMax()-metoden trekker ut det maksimale elementet fra heapen. Metoden bytter først rot-noden med den siste noden i arrayen og kaller deretter maxHeapify()-metoden på rot-noden.

6. Hva er noen bruksområder for maks-heaps?

Maks-heaps brukes i en rekke applikasjoner, inkludert:

  • Prioritetskøer
  • Heap-sortering
  • Utvalgsalgoritme
  • Dijkstras algoritme
  • Prims algoritme

7. Hva er tids kompleksiteten for buildMaxHeap()-metoden?

Tids kompleksiteten for buildMaxHeap()-metoden er O(n), der n er antallet elementer i heapen.

8. Hva er tids kompleksiteten for insert()-metoden?

Tids kompleksiteten for insert()-metoden er O(log n), der n er antallet elementer i heapen.

9. Hva er tids kompleksiteten for extractMax()-metoden?

Tids kompleksiteten for extractMax()-metoden er O(log n), der n er antallet elementer i heapen.

10. Hvor kan jeg lære mer om maks-heaps?

Du kan lære mer om maks-heaps ved å lese følgende ressurser: