Cum se utilizează Max Heap în Java?

Cum Se Utilizeaza Max Heap In Java



Programatorul poate recupera cu ușurință elementul maxim utilizând „ Max Heap ” arbore binar. Ca și în acest arbore, elementul maxim se află întotdeauna în nodul superior al arborelui, care este cunoscut sub numele de „ rădăcină ” nod. În plus, oferă inserarea și ștergerea eficientă a elementelor menținând în același timp ordinea sortată. În plus, un „Max Heap” poate efectua cu ușurință lucrări programate pe baza priorității lor sau a altor criterii.

Acest articol explică următorul conținut:







Cum se utilizează Max Heap în Java?

A ' Max Heap ” este utilizat ca structură de date de bază pentru implementarea unei cozi de prioritate. În coada de prioritate, datele sunt procesate în funcție de valoarea priorității atribuite. De asemenea, poate fi utilizat pentru a sorta elementele de date în ordine descrescătoare, în mod eficient.



„Max Heap” poate fi generat folosind două metode care sunt descrise în exemplul de codec de mai jos:



Metoda 1: Folosiți metoda „maxHeapify()”.

maxHeapify() ” metoda generează un “ Max Heap ” dintr-o colecție existentă de elemente prin transformarea structurilor de date. Mai mult, această metodă ajută la modificarea matricei inițiale, reducând nevoia de memorie suplimentară.





De exemplu, vizitați codul de mai jos pentru a genera un „ Max Heap ” folosind metoda „maxHeapify()”:

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

clasa publică MaxHeapifyExam {
public static void main ( Şir [ ] argumente ) // crearea principalului ( ) metodă
{
Listă < Întreg > testEle = new ArrayList <> ( ) ;
  testEle.add ( 5 ) ;
  testEle.add ( 3 ) ;
  testEle.add ( 8 ) ;
  testEle.add ( 2 ) ;
  testEle.add ( 1 ) ;
  testEle.add ( 7 ) ;
System.out.println ( „Lista originală:” + testEle ) ;
maxHeapify ( testEle ) ;
System.out.println ( „Granul maxim generat:” + testEle ) ;
}

private static void maxHeapify ( Listă < Întreg > testEle ) {
 int k = testEle.size ( ) ;
pentru ( int i = k / 2 - 1 ; i > = 0 ; eu-- ) {
îngrămădit ( testEle, k, i ) ;
}
}

private static void heapify ( Listă < Întreg > testEle, int k, int i ) {
int mai mare = i;
int leftSide = 2 * eu + 1 ;
int dreapta = 2 * eu + 2 ;
dacă ( partea stanga < k && testEle.get ( partea stanga ) > testEle.get ( mai mare ) ) {
mai mare = stânga;
}
dacă ( partea dreapta < k && testEle.get ( partea dreapta ) > testEle.get ( mai mare ) ) {
mai mare = dreapta;
}
dacă ( mai mare ! = i ) {
Colecții.swap ( testEle, i, greater ) ;
îngrămădit ( testEle, k, greater ) ;
}
}
}



Explicația codului de mai sus:

  • În primul rând, lista „ testEle ” este inițializat cu elemente de date simulate în „ principal() ” și tipărită pe consolă.
  • Apoi, lista „testEle” este transmisă funcției „maxHeapify()”, iar apoi lista returnată este afișată pe consolă.
  • Apoi, „ maxHeapify() ” este inițializată și dimensiunea listei furnizate este preluată prin utilizarea „ mărimea() ” metoda.
  • Apoi, utilizați „ pentru ” buclă pentru a seta structura heap și a calcula poziția fiecărui nod.
  • Acum, folosiți „ heapify() ” și setați poziția pentru nodurile „sus”, „stânga” și „dreapta” prin atribuirea de valori variabilelor „mare”, „leftSide”, respectiv „rightSide”.
  • După aceea, utilizați mai multe „ dacă ” instrucțiuni condiționale pentru a verifica dacă „ partea stanga ' nodul este mai mare decât ' partea dreapta ” nod și invers. În cele din urmă, valoarea mai mare este stocată în „ mai mare ” nod.
  • În cele din urmă, noul „ mai mare „Valoarea nodului este verificată cu valoarea deja stocată în „ mai mare ” variabilă de nod. Si ' swap() funcția ” funcționează în consecință pentru a seta cea mai mare valoare din ” mai mare ' variabil.

După încheierea fazei de execuție:

Instantaneul arată că heap-ul maxim este generat folosind „ maxHeapify() ” metoda în Java.

Metoda 2: Utilizați metoda „Collections.reverseOrder()”.

Collections.reverseOrder() ” oferă o metodă simplă și concisă de a genera un “ Max Heap ” prin sortarea colecției în ordine inversă. Acest lucru permite reutilizarea codului și evită necesitatea implementării personalizării „ îngrămădit ”, așa cum se arată în fragmentul de cod de mai jos:

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

clasă publică ReverseOrderExample {
public static void main ( Şir [ ] argumente ) // crearea principalului ( ) metodă
{
Listă < Întreg > testEle = new ArrayList <> ( ) ;
  testEle.add ( 5 ) ;
  testEle.add ( 38 ) ;
  testEle.add ( 98 ) ;
  testEle.add ( 26 ) ;
  testEle.add ( 1 ) ;
  testEle.add ( 73 ) ;
System.out.println ( „Lista originală:” + testEle ) ;
Colecţii.sortare ( testEle, Collections.reverseOrder ( ) ) ;
System.out.println ( „Granul maxim generat:” + testEle ) ;
}
}

Explicația codului de mai sus:

  • Mai întâi, importați „ ArrayList ”, “ Colecții ' și ' Listă ” utilități în fișierul Java.
  • Apoi, creați un „ Listă ' numit ' testEle ” și inserați elemente fictive în listă.
  • În continuare, „ fel() ” este utilizată pentru a sorta elementele de date în ordine crescătoare și pentru a trece lista ca parametru de-a lungul “ Collections.reverseOrder() ” metoda. Acest lucru face ca sortarea „ testEle ” lista în ordine inversă.

După încheierea fazei de execuție:

Instantaneul arată că „Max Heap” este generat și sortat folosind metoda „Collections.reverseOrder()”.

Concluzie

Prin crearea unui „ Max Heap ”, utilizatorii pot folosi metodele „maxHeapify()” și „Collections.reverseOrder()”. Aceștia gestionează o colecție de elemente într-un mod care permite accesul rapid la elementul maxim și menținerea eficientă a unei comenzi sortate. Depinde doar de cerințele specifice și de nivelul de control necesar asupra procesului de creare a heap-ului.