Bagaimana untuk Menggunakan Max Heap di Java?

Bagaimana Untuk Menggunakan Max Heap Di Java



Pengaturcara boleh dengan mudah mendapatkan elemen maksimum dengan menggunakan ' Timbunan Maks ” pokok binari. Seperti dalam pokok ini, elemen maksimum sentiasa berada di nod atas pokok yang dikenali sebagai ' akar ” nod. Selain itu, ia menawarkan pemasukan dan pemadaman elemen yang cekap sambil mengekalkan susunan yang disusun. Di samping itu, 'Timbunan Maks' boleh melaksanakan kerja berjadual dengan mudah berdasarkan keutamaan atau kriteria lain.

Artikel ini menerangkan kandungan berikut:







Bagaimana untuk Menggunakan Max Heap di Java?

A ' Timbunan Maks ” digunakan sebagai struktur data asas untuk melaksanakan baris gilir keutamaan. Dalam baris gilir keutamaan, data diproses berdasarkan nilai keutamaan yang diberikan. Ia juga boleh digunakan untuk mengisih elemen data dalam susunan menurun, dengan cekap.



'Timbunan Maks' boleh dijana menggunakan dua kaedah yang diterangkan sepanjang contoh codec di bawah:



Kaedah 1: Gunakan Kaedah 'maxHeapify()'.

' maxHeapify() kaedah ' menjana ' Timbunan Maks ” daripada koleksi elemen sedia ada dengan mengubah struktur data. Selain itu, kaedah ini membantu dalam mengubah suai tatasusunan asal di tempat mengurangkan keperluan untuk memori tambahan.





Sebagai contoh, lawati kod di bawah untuk menjana ' Timbunan Maks ” menggunakan kaedah “maxHeapify()”:

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

kelas awam MaxHeapifyExam {
utama lompang statik awam ( Tali [ ] args ) // penciptaan utama ( ) kaedah
{
Senaraikan < Integer > testsEle = ArrayList baharu <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'Senarai Asal: ' + ujian ) ;
maxHeapify ( UJIAN ) ;
System.out.println ( 'Timbunan Maks Dihasilkan:' + ujian ) ;
}

kekosongan statik peribadi maxHeapify ( Senaraikan < Integer > UJIAN ) {
int k = testEle.saiz ( ) ;
untuk ( int i = k / 2 - 1 ; i > = 0 ; saya-- ) {
menimbun ( testsEle, k, i ) ;
}
}

lompang statik peribadi menimbun ( Senaraikan < Integer > testsEle, int k, int i ) {
int lebih besar = i;
int leftSide = 2 * i + 1 ;
int rightSide = 2 * i + 2 ;
jika ( sebelah kiri < k && testEle.get ( sebelah kiri ) > testEle.get ( lebih besar ) ) {
lebih besar = Sebelah kiri;
}
jika ( sebelah kanan < k && testEle.get ( sebelah kanan ) > testEle.get ( lebih besar ) ) {
lebih besar = Sebelah kanan;
}
jika ( lebih besar ! = i ) {
Collections.swap ( testsEle, i, lebih besar ) ;
menimbun ( testsEle, k, lebih besar ) ;
}
}
}



Penjelasan kod di atas:

  • Pertama, senarai ' UJIAN ” dimulakan dengan elemen data tiruan dalam “ utama() ” kaedah dan dicetak pada konsol.
  • Seterusnya, senarai 'testEle' dihantar ke fungsi 'maxHeapify()', dan kemudian Senarai yang dikembalikan akan dipaparkan pada konsol.
  • Kemudian, ' maxHeapify() ' kaedah dimulakan dan saiz senarai yang disediakan diambil dengan menggunakan ' saiz() ” kaedah.
  • Seterusnya, gunakan ' untuk ” gelung untuk menetapkan struktur timbunan dan mengira kedudukan setiap nod.
  • Sekarang, gunakan ' heapify() ” dan tetapkan kedudukan untuk nod “atas”, “kiri” dan “kanan” dengan memberikan nilai masing-masing kepada pembolehubah “lebih besar”, “LeftSide”, dan “rightSide”.
  • Selepas itu, gunakan berbilang ' jika pernyataan bersyarat untuk menyemak sama ada sebelah kiri ' nod lebih besar daripada ' sebelah kanan ” nod dan sebaliknya. Pada akhirnya, nilai yang lebih besar akan disimpan dalam ' lebih besar ” nod.
  • Akhirnya, baru ' lebih besar ' nilai nod disemak dengan nilai yang telah disimpan dalam ' lebih besar ” pembolehubah nod. Dan juga ' swap() fungsi ” berfungsi sewajarnya untuk menetapkan nilai terbesar dalam “ lebih besar ” pembolehubah.

Selepas tamat fasa pelaksanaan:

Syot kilat menunjukkan timbunan maks dijana menggunakan “ maxHeapify() ” kaedah di Jawa.

Kaedah 2: Gunakan Kaedah 'Collections.reverseOrder()'.

' Collections.reverseOrder() ' kaedah menawarkan kaedah yang mudah dan ringkas untuk menghasilkan ' Timbunan Maks ” dengan mengisih koleksi dalam susunan terbalik. Ini membolehkan kod untuk digunakan semula dan mengelakkan keperluan untuk melaksanakan adat ' menimbun ” logik, seperti yang ditunjukkan dalam coretan kod di bawah:

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

Contoh ReverseOrder kelas awam {
utama lompang statik awam ( Tali [ ] args ) // penciptaan utama ( ) kaedah
{
Senaraikan < Integer > testsEle = ArrayList baharu <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'Senarai Asal: ' + ujian ) ;
Collections.sort ( testsEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'Timbunan Maks Dihasilkan:' + ujian ) ;
}
}

Penjelasan kod di atas:

  • Pertama, import ' ArrayList ”, “ Koleksi ” dan “ Senaraikan ” utiliti dalam fail Java.
  • Kemudian, buat ' Senaraikan ” bernama “ UJIAN ” dan masukkan elemen tiruan dalam senarai.
  • Seterusnya, ' sort() Kaedah ' digunakan untuk mengisih elemen data dalam tertib menaik dan lulus senarai sebagai parameter di sepanjang ' Collections.reverseOrder() ” kaedah. Ini menjadikan pengisihan ' UJIAN ” senarai dalam susunan terbalik.

Selepas tamat fasa pelaksanaan:

Gambar menunjukkan bahawa 'Timbunan Maks' dijana dan diisih menggunakan kaedah 'Collections.reverseOrder()'.

Kesimpulan

Dengan mencipta ' Timbunan Maks ”, pengguna boleh menggunakan kaedah “maxHeapify()” dan “Collections.reverseOrder()”. Mereka menguruskan koleksi elemen dengan cara yang membolehkan akses pantas kepada elemen maksimum dan penyelenggaraan yang cekap bagi pesanan yang diisih. Ia bergantung sepenuhnya pada keperluan khusus dan tahap kawalan yang diperlukan ke atas proses penciptaan timbunan.