Ako používať Max Heap v Jave?

Ako Pouzivat Max Heap V Jave



Programátor môže jednoducho získať maximálny počet prvkov pomocou „ Max Heap “binárny strom. Rovnako ako v tomto strome sa maximálny prvok vždy nachádza v hornom uzle stromu, ktorý je známy ako „ koreň “uzol. Navyše ponúka efektívne vkladanie a mazanie prvkov pri zachovaní zoradeného poradia. Okrem toho môže „Max Heap“ jednoducho vykonávať plánované úlohy na základe ich priority alebo iných kritérií.

Tento článok vysvetľuje nasledujúci obsah:







Ako používať Max Heap v Jave?

A “ Max Heap ” sa používa ako základná dátová štruktúra na implementáciu prioritného frontu. V prioritnom rade sa údaje spracúvajú na základe ich priradenej hodnoty priority. Môže sa tiež použiť na efektívne triedenie dátových prvkov v zostupnom poradí.



„Maximálnu haldu“ možno vygenerovať pomocou dvoch metód, ktoré sú popísané v príklade kodeku nižšie:



Metóda 1: Použite metódu „maxHeapify()“.

' maxHeapify() “metóda generuje “ Max Heap ” z existujúcej kolekcie prvkov transformáciou dátových štruktúr. Okrem toho táto metóda pomáha pri úprave pôvodného poľa na mieste, čím sa znižuje potreba ďalšej pamäte.





Napríklad navštívte nižšie uvedený kód a vygenerujte „ Max Heap ” pomocou metódy “maxHeapify()”:

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

verejná trieda MaxHeapifyExam {
public static void main ( Reťazec [ ] args ) // vytvorenie hlavného ( ) metóda
{
Zoznam < 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ý zoznam:' + testy ) ;
maxHeapify ( TESTY ) ;
System.out.println ( 'Vygenerovaná maximálna halda:' + testy ) ;
}

private static void maxHeapify ( Zoznam < Celé číslo > TESTY ) {
int k = testEle.veľkosť ( ) ;
pre ( int i = k / 2 - 1 ; i > = 0 ; ja-- ) {
nahromadiť sa ( testyEle, k, i ) ;
}
}

súkromné ​​statické void heapify ( Zoznam < Celé číslo > testyEle, int k, int i ) {
int väčšie = i;
int leftSide = 2 * ja + 1 ;
int pravá strana = 2 * ja + 2 ;
ak ( ľavá strana < k && testEle.get ( ľavá strana ) > testEle.get ( väčší ) ) {
väčšia = ľavá strana;
}
ak ( pravá strana < k && testEle.get ( pravá strana ) > testEle.get ( väčší ) ) {
väčšia = pravá strana;
}
ak ( väčší ! = i ) {
Kolekcie.swap ( testyEle, i, väčší ) ;
nahromadiť sa ( testyEle, k, väčšie ) ;
}
}
}



Vysvetlenie vyššie uvedeného kódu:

  • Najprv zoznam „ TESTY ” sa inicializuje pomocou fiktívnych dátových prvkov v súbore “ Hlavná() “ a vytlačené na konzole.
  • Ďalej sa zoznam „testEle“ odovzdá funkcii „maxHeapify()“ a vrátený zoznam sa potom zobrazí na konzole.
  • Potom ' maxHeapify() “ sa inicializuje a veľkosť poskytnutého zoznamu sa získa pomocou „ veľkosť () “.
  • Ďalej použite „ pre ” na nastavenie štruktúry haldy a výpočet polohy každého uzla.
  • Teraz použite „ heapify() “ a nastavte pozíciu pre „horné“, „ľavé“ a „pravé“ uzly priradením hodnôt premenným „väčšia“, „ľavá strana“ a „pravá strana“.
  • Potom použite viacero „ ak „podmienečné príkazy na kontrolu, či „ ľavá strana 'uzol je väčší ako ' pravá strana “ uzol a naopak. Nakoniec sa väčšia hodnota uloží do „ väčší “uzol.
  • Nakoniec nový „ väčší „hodnota uzla sa kontroluje s už uloženou hodnotou v „ väčší ” premenná uzla. A „ vymeniť () Funkcia “ funguje podľa toho, aby nastavila najväčšiu hodnotu v poli “ väčší “premenná.

Po ukončení vykonávacej fázy:

Snímka ukazuje, že maximálna halda sa generuje pomocou „ maxHeapify() “ metóda v jazyku Java.

Metóda 2: Použite metódu „Collections.reverseOrder()“.

' Collections.reverseOrder() ” metóda ponúka jednoduchú a stručnú metódu na generovanie “ Max Heap ” zoradením kolekcie v opačnom poradí. To umožňuje opätovné použitie kódu a vyhýba sa potrebe implementovať vlastné „ nahromadiť sa ” logika, ako je uvedené v úryvku kódu nižšie:

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

verejná trieda ReverseOrderExample {
public static void main ( Reťazec [ ] args ) // vytvorenie hlavného ( ) metóda
{
Zoznam < 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ý zoznam:' + testy ) ;
Collections.sort ( testyEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'Vygenerovaná maximálna halda:' + testy ) ;
}
}

Vysvetlenie vyššie uvedeného kódu:

  • Najprv importujte súbor „ ArrayList “, “ zbierky “ a „ Zoznam ” v súbore Java.
  • Potom vytvorte „ Zoznam “ s názvom “ TESTY “ a vložte fiktívne prvky do zoznamu.
  • Ďalej, „ zoradiť () “ metóda sa používa na triedenie dátových prvkov vo vzostupnom poradí a odovzdanie zoznamu ako parametra pozdĺž „ Collections.reverseOrder() “. Vďaka tomu je triedenie „ TESTY “ zoznam v opačnom poradí.

Po ukončení vykonávacej fázy:

Snímka ukazuje, že „Max Heap“ sa generuje a triedi pomocou metódy „Collections.reverseOrder()“.

Záver

Vytvorením „ Max Heap “, používatelia môžu použiť metódy „maxHeapify()“ a „Collections.reverseOrder()“. Zbierku prvkov spravujú spôsobom, ktorý umožňuje rýchly prístup k maximu prvku a efektívnu údržbu vytriedenej objednávky. Závisí to výlučne od konkrétnych požiadaviek a úrovne potrebnej kontroly nad procesom vytvárania haldy.