Jak používat Max Heap v Javě?

Jak Pouzivat Max Heap V Jave



Programátor může snadno získat maximum prvku pomocí „ Max Heap “binární strom. Stejně jako v tomto stromu se maximální prvek vždy nachází v horním uzlu stromu, který je známý jako „ vykořenit “uzel. Navíc nabízí efektivní vkládání a mazání prvků při zachování setříděného pořadí. Kromě toho může „Max Heap“ snadno provádět naplánované úlohy na základě jejich priority nebo jiných kritérií.

Tento článek vysvětluje následující obsah:







Jak používat Max Heap v Javě?

A ' Max Heap ” se používá jako základní datová struktura pro implementaci prioritní fronty. V prioritní frontě jsou data zpracovávána na základě jejich přiřazené hodnoty priority. Lze jej také využít k efektivnímu třídění datových prvků v sestupném pořadí.



„Max Heap“ lze vygenerovat pomocí dvou metod, které jsou popsány v příkladu kodeku níže:



Metoda 1: Použijte metodu „maxHeapify()“.

' maxHeapify() “ metoda generuje “ Max Heap ” z existující kolekce prvků transformací datových struktur. Navíc tato metoda pomáhá při úpravě původního pole na místě, což snižuje potřebu další paměti.





Například navštivte níže uvedený kód a vygenerujte „ Max Heap ” pomocí metody “maxHeapify()”:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

veřejná třída MaxHeapifyExam {
public static void main ( Tětiva [ ] argumenty ) // vytvoření hlavního ( ) metoda
{
Seznam < Celé číslo > testyEle = nový ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'Původní seznam:' + testy ) ;
maxHeapify ( TESTY ) ;
System.out.println ( 'Vygenerovaná maximální halda:' + testy ) ;
}

private static void maxHeapify ( Seznam < Celé číslo > TESTY ) {
int k = testEle.velikost ( ) ;
pro ( int i = k / 2 - 1 ; i > = 0 ; já-- ) {
nahromadit se ( testyEle, k, i ) ;
}
}

private static void heapify ( Seznam < Celé číslo > testyEle, int k, int i ) {
int větší = i;
int leftSide = 2 * já + 1 ;
int pravá strana = 2 * já + 2 ;
-li ( levá strana < k && testEle.get ( levá strana ) > testEle.get ( větší ) ) {
větší = levá strana;
}
-li ( pravá strana < k && testEle.get ( pravá strana ) > testEle.get ( větší ) ) {
větší = pravá strana;
}
-li ( větší ! = i ) {
Collections.swap ( testyEle, i, větší ) ;
nahromadit se ( testyEle, k, větší ) ;
}
}
}



Vysvětlení výše uvedeného kódu:

  • Nejprve seznam „ TESTY “ je inicializován pomocí fiktivních datových prvků v „ hlavní() “ a vytištěné na konzole.
  • Dále je seznam „testEle“ předán funkci „maxHeapify()“ a poté se vrácený seznam zobrazí na konzole.
  • Poté, „ maxHeapify() “ je inicializována metoda a velikost poskytnutého seznamu je načtena pomocí “ velikost() “ metoda.
  • Dále použijte „ pro ” smyčka pro nastavení struktury haldy a výpočet polohy každého uzlu.
  • Nyní použijte „ heapify() ” a nastavte pozici pro uzly „top“, „left“ a „right“ přiřazením hodnot proměnným „větší“, „levá strana“ a „pravá strana“.
  • Poté použijte více „ -li „podmíněné příkazy ke kontrole, zda „ levá strana 'uzel je větší než ' pravá strana “uzel a naopak. Nakonec se větší hodnota uloží do „ větší “uzel.
  • Konečně nový „ větší 'hodnota uzlu je kontrolována s již uloženou hodnotou v ' větší proměnná uzlu. A „ swap() Funkce “ funguje podle toho, aby nastavila největší hodnotu v “ větší “proměnná.

Po skončení prováděcí fáze:

Snímek ukazuje, že maximální halda je generována pomocí „ maxHeapify() “ metoda v Javě.

Metoda 2: Použijte metodu „Collections.reverseOrder()“.

' Collections.reverseOrder() “ metoda nabízí jednoduchou a stručnou metodu pro generování “ Max Heap ” seřazením sbírky v opačném pořadí. To umožňuje opětovné použití kódu a není nutné implementovat vlastní „ nahromadit se ” logika, jak je znázorněno na níže uvedeném úryvku kódu:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

veřejná třída ReverseOrderExample {
public static void main ( Tětiva [ ] argumenty ) // vytvoření hlavního ( ) metoda
{
Seznam < Celé číslo > testyEle = nový ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'Původní seznam:' + testy ) ;
Collections.sort ( testyEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'Vygenerovaná maximální halda:' + testy ) ;
}
}

Vysvětlení výše uvedeného kódu:

  • Nejprve importujte „ ArrayList “, “ Sbírky ' a ' Seznam ” v souboru Java.
  • Poté vytvořte „ Seznam “ s názvem “ TESTY “ a vložte fiktivní prvky do seznamu.
  • Dále, „ seřadit () ” metoda se používá k řazení datových prvků ve vzestupném pořadí a předávání seznamu jako parametru podél “ Collections.reverseOrder() “ metoda. Díky tomu je třídění „ TESTY “ seznam v opačném pořadí.

Po skončení prováděcí fáze:

Snímek ukazuje, že „Max Heap“ se generuje a třídí pomocí metody „Collections.reverseOrder()“.

Závěr

Vytvořením „ Max Heap “, mohou uživatelé používat metody „maxHeapify()“ a „Collections.reverseOrder()“. Spravují kolekci prvků způsobem, který umožňuje rychlý přístup k maximu prvku a efektivní údržbu setříděné objednávky. Záleží pouze na konkrétních požadavcích a úrovni potřebné kontroly nad procesem vytváření haldy.