Kaip naudoti „Max Heap“ programoje „Java“?

Kaip Naudoti Max Heap Programoje Java



Programuotojas gali lengvai gauti maksimalų elementą naudodamas „ Max Heap “ dvejetainis medis. Kaip ir šiame medyje, didžiausias elementas visada yra viršutiniame medžio mazge, kuris yra žinomas kaip ' šaknis “ mazgas. Be to, jis siūlo efektyvų elementų įterpimą ir ištrynimą išlaikant rūšiuotą tvarką. Be to, „Max Heap“ gali lengvai atlikti suplanuotas užduotis pagal prioritetą ar kitus kriterijus.

Šiame straipsnyje paaiškinamas šis turinys:







Kaip naudoti „Max Heap“ programoje „Java“?

A “ Max Heap “ yra naudojama kaip pagrindinė duomenų struktūra prioritetinei eilei įgyvendinti. Prioritetinėje eilėje duomenys apdorojami pagal jiems priskirtą prioriteto reikšmę. Jis taip pat gali būti naudojamas norint efektyviai rūšiuoti duomenų elementus mažėjančia tvarka.



„Max Heap“ galima sugeneruoti dviem būdais, kurie aprašyti toliau pateiktame kodeko pavyzdyje:



1 būdas: naudokite „maxHeapify()“ metodą

maxHeapify() ' metodas sukuria ' Max Heap “ iš esamo elementų rinkinio, transformuojant duomenų struktūras. Be to, šis metodas padeda pakeisti pradinį masyvą, sumažinant papildomos atminties poreikį.





Pavyzdžiui, apsilankykite toliau pateiktame kode, kad sugeneruotumėte „ Max Heap “ naudojant „maxHeapify()“ metodą:

importuoti java.util.ArrayList;
importuoti java.util.Collections;
importuoti java.util.List;

viešoji klasė MaxHeapifyExam {
viešas statinis tuštumas pagrindinis ( Styga [ ] args ) // pagrindinio sukūrimas ( ) metodas
{
Sąrašas < Sveikasis skaičius > testsEle = naujas ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( „Originalus sąrašas:“ + testai ) ;
maxHeapify ( BANDYMAI ) ;
System.out.println ( „Sukurta didžiausia krūva:“ + testai ) ;
}

privati ​​statinė tuštuma maxHeapify ( Sąrašas < Sveikasis skaičius > BANDYMAI ) {
int k = testEle.size ( ) ;
dėl ( int i = k / 2 - 1 ; i > = 0 ; aš-- ) {
sukrauti ( testaiEle, k, i ) ;
}
}

privatus statinis tuštumas heapify ( Sąrašas < Sveikasis skaičius > testaiEle, int k, int i ) {
int didesnis = i;
int leftSide = 2 * aš + 1 ;
int dešinėje = 2 * aš + 2 ;
jeigu ( kairė pusė < k && testEle.get ( kairė pusė ) > testEle.get ( didesnis ) ) {
didesnis = leftSide;
}
jeigu ( dešinioji pusė < k && testEle.get ( dešinioji pusė ) > testEle.get ( didesnis ) ) {
didesnis = dešinioji pusė;
}
jeigu ( didesnis ! = i ) {
Kolekcijos.swap ( testaiEle, i, didesnis ) ;
sukrauti ( testaiEle, k, didesnis ) ;
}
}
}



Aukščiau pateikto kodo paaiškinimas:

  • Pirma, sąrašas ' BANDYMAI ' yra inicijuojamas su netikrais duomenų elementais ' pagrindinis () “ metodu ir atspausdinta ant konsolės.
  • Tada sąrašas „testEle“ perduodamas funkcijai „maxHeapify()“, o tada grąžintas sąrašas rodomas konsolėje.
  • Tada ' maxHeapify() “ metodas inicijuojamas ir pateikto sąrašo dydis gaunamas naudojant „ dydis () “ metodas.
  • Tada naudokite „ dėl “ kilpa, kad nustatytumėte krūvos struktūrą ir apskaičiuotumėte kiekvieno mazgo padėtį.
  • Dabar naudokite „ kupinti () “ metodą ir nustatykite „viršaus“, „kairės“ ir „dešinės“ mazgų padėtį, atitinkamai priskirdami reikšmes „greater“, „leftSide“ ir „rightSide“ kintamiesiems.
  • Po to naudokite kelis jeigu “ sąlyginius teiginius, kad patikrintumėte, ar „ kairė pusė ' mazgas yra didesnis nei ' dešinioji pusė “ mazgas ir atvirkščiai. Galiausiai didesnė vertė išsaugoma „ didesnis “ mazgas.
  • Pagaliau naujasis „ didesnis “ mazgo vertė patikrinama su jau išsaugota verte „ didesnis “ mazgo kintamasis. Ir ' apsikeitimas () Funkcija veikia atitinkamai, kad nustatytų didžiausią reikšmę didesnis “ kintamasis.

Pasibaigus vykdymo etapui:

Momentinė nuotrauka rodo, kad didžiausia krūva sugeneruojama naudojant „ maxHeapify() “ metodas Java.

2 būdas: naudokite metodą „Collections.reverseOrder()“.

Collections.reverseOrder() “ metodas siūlo paprastą ir glaustą būdą sukurti Max Heap “ rūšiuodami kolekciją atvirkštine tvarka. Tai leidžia kodą naudoti pakartotinai ir nereikia įdiegti tinkinto sukrauti “ logika, kaip parodyta toliau pateiktame kodo fragmente:

importuoti java.util.ArrayList;
importuoti java.util.Collections;
importuoti java.util.List;

viešoji klasė ReverseOrderExample {
viešas statinis tuštumas pagrindinis ( Styga [ ] args ) // pagrindinio sukūrimas ( ) metodas
{
Sąrašas < Sveikasis skaičius > testsEle = naujas ArrayList <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( „Originalus sąrašas:“ + testai ) ;
Kolekcijos.rūšiuoti ( testsEle, Collections.reverseOrder ( ) ) ;
System.out.println ( „Sukurta didžiausia krūva:“ + testaiEle ) ;
}
}

Aukščiau pateikto kodo paaiškinimas:

  • Pirmiausia importuokite „ ArrayList “, „ Kolekcijos “ ir „ Sąrašas “ programa Java faile.
  • Tada sukurkite „ Sąrašas ' pavadintas ' BANDYMAI “ ir į sąrašą įterpkite netikrus elementus.
  • Toliau „ Rūšiuoti () ' metodas naudojamas duomenų elementams rūšiuoti didėjančia tvarka ir perduoti sąrašą kaip parametrą kartu su ' Collections.reverseOrder() “ metodas. Tai leidžia rūšiuoti BANDYMAI “ sąrašą atvirkštine tvarka.

Pasibaigus vykdymo etapui:

Momentinė nuotrauka rodo, kad „Max Heap“ generuojamas ir rūšiuojamas naudojant „Collections.reverseOrder()“ metodą.

Išvada

Sukūrę „ Max Heap “, vartotojai gali naudoti „maxHeapify()“ ir „Collections.reverseOrder()“ metodus. Jie valdo elementų rinkinį taip, kad būtų galima greitai pasiekti maksimalų elementą ir veiksmingai išlaikyti surūšiuotą tvarką. Tai priklauso tik nuo konkrečių reikalavimų ir reikalingos krūvos kūrimo proceso kontrolės lygio.