Verstehen, wie ein binärer Heap in Java implementiert wird



Dieser Artikel bietet Ihnen ein detailliertes und umfassendes Wissen darüber, wie Sie einen binären Heap in Java mit Beispielen implementieren können.

Dieser Artikel gibt Ihnen einen vollständigen Überblick über die Funktionsweise der Heap-Sortierung. Später erfahren Sie, wie Sie einen binären Heap in Java implementieren.

Hier ist die Agenda für diesen Artikel:





  1. Was ist Heap-Sortierung?
  2. Max Heap
  3. Min Heap
  4. Heap-Implementierung in Java
    • Diagramm
    • Code

Lass uns anfangen!

Was ist Heap-Sortierung?

Heap ist im Grunde eine baumbasierte Datenstruktur. Es hat Knoten. Der Knoten besteht aus bestimmten Elementen. Jeder Knoten enthält ein Element.



Knoten können Kinder haben. Wenn keine Kinder vorhanden sind, spricht man von einem Blatt.

Was ist Datenwissenschaft?

Es gibt zwei Regeln, die befolgt werden müssen:

  • Der Wert jedes Knotens muss kleiner oder gleich allen in seinen untergeordneten Knoten gespeicherten Werten sein.
  • Es hat die geringstmögliche Höhe.

Haufen sind äußerst effizient beim Extrahieren derkleinstes oder größtes Element.



Gehen wir jetzt zu Min Heap!

Min Heap

Min Heap ist ein vollständiger Binärbaum, in dem der Wert des Stammelements kleiner oder gleich einem der untergeordneten Elemente ist.

Darstellung von min Haufen

Arr [(i-1) / 2]: Dadurch wird der übergeordnete Knoten zurückgegeben.

Arr [(2 * i) + 1]: Dadurch wird der linke untergeordnete Knoten zurückgegeben.

Arr [(2 * i) + 2]: Dadurch wird der richtige untergeordnete Knoten zurückgegeben.

Es gibt bestimmte Methoden von Min Heap:

  • einfügen(): Ein neuer Schlüssel am Ende des Baums wird hinzugefügt. Wenn der neue Schlüssel größer als der übergeordnete Schlüssel ist, müssen Sie nichts weiter tun. Andernfalls müssen wir ihn durchlaufen, um die Heap-Eigenschaft einzurichten.
  • getMin (): Diese Methode hilft, das Stammelement zurückzugeben.
  • extractMin (): Diese Methode gibt das Minimum zurückElement.

Fahren Sie jetzt mit Max Heap fort.

Salz gegen Koch gegen Marionette

Max Haufen

Max Heap ist ein vollständiger Binärbaum, in dem der Wert des Stammelements größer oder gleich einem der untergeordneten Elemente ist.

Max Heap besteht auch aus mehreren Methoden!

  • Insert (): Es wird ein Element in den Heap eingefügt.
  • Löschen() : Es wird ein Element aus dem Heap gelöscht.
  • FindMax (): Es wird das maximale Element aus dem Heap gefunden.
  • printHeap (): Der Inhalt des Heaps wird gedruckt

Lassen Sie mich Ihnen nun die Heap-Implementierung anhand eines Diagramms und später eines Java zeigenCode.

Heap-Implementierung in Java

Diagramm:

Heap

Das obige Diagramm zeigt den binären Heap in Java. Da Sie erfahren haben, dass es zwei Heaps gibt: Min-Heap und Max-Heap, sehen Sie hier ein Diagramm:

Wenn wir nun zu unserem nächsten Segment übergehen, werden wir sehen, wie ein binärer Heap in Java implementiert wird.

Code:

öffentliche Klasse BinaryHeap {private static final int d = 2 private int [] heap private int heapSize / ** * Dies initialisiert unseren Heap mit der Standardgröße. * / public BinaryHeap (int Kapazität) {heapSize = 0 heap = new int [Kapazität + 1] Arrays.fill (Heap, -1)} / ** * Dies prüft, ob der Heap leer ist oder nicht * Komplexität: O ( 1) * / public boolean isEmpty () {return heapSize == 0} / ** * Hiermit wird geprüft, ob der Heap voll ist oder nicht. * Komplexität: O (1) * / public boolean isFull () {return heapSize == heap .length} private int parent (int i) {return (i-1) / d} private int kthChild (int i, int k) {return d * i + k} / ** * Dies fügt ein neues Element in den Heap ein * Komplexität: O (log N) * Als Worst-Case-Szenario müssen wir bis zur Wurzel durchlaufen * / public void insert (int x) {if (isFull ()) löst eine neue NoSuchElementException aus ('Heap ist voll, kein Platz zum Einfügen neues Element ') heap [heapSize ++] = x heapifyUp (heapSize-1)} / ** * Dies löscht das Element am Index x * Komplexität: O (log N) * * / public int delete (int x) {if (isEmpty ()) Neue NoSuchElementException auslösen ('Heap ist leer, kein Element zum Löschen') int key = heap [x] heap [x] = heap [heapSize -1] heapSize-- heapifyDown (x) retu rn key} / ** * Diese Methode wird verwendet, um die Heap-Eigenschaft beim Einfügen eines Elements beizubehalten. * * / private void heapifyUp (int i) {int temp = heap [i] während (i> 0 && temp> heap [parent (i)]) {heap [i] = heap [parent (i)] i = parent (i)} heap [i] = temp} / ** * Diese Methode wird verwendet, um die Heap-Eigenschaft beim Löschen eines Elements beizubehalten. * * / private void heapifyDown (int i) {int child int temp = heap [i] while (kthChild (i, 1)heap [rightChild]? leftChild: rightChild} / ** * Diese Methode wird verwendet, um alle Elemente des Heaps zu drucken * * / public void printHeap () {System.out.print ('nHeap =') für (int i = 0 i

Damit sind wir am Ende dieses Artikels über Binary Heap in Java angelangt. Besuche die von Edureka, einem vertrauenswürdigen Online-Lernunternehmen mit einem Netzwerk von mehr als 250.000 zufriedenen Lernenden auf der ganzen Welt. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka richtet sich an Studenten und Fachleute, die Java-Entwickler werden möchten. Der Kurs soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für grundlegende als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.

Hast du eine Frage an uns? Bitte erwähnen Sie es im Kommentarbereich dieses 'Java ArrayList' -Blogs und wir werden uns so schnell wie möglich bei Ihnen melden.