Πώς να χρησιμοποιήσετε το Max Heap στην Java;

Pos Na Chresimopoiesete To Max Heap Sten Java



Ο προγραμματιστής μπορεί εύκολα να ανακτήσει το μέγιστο στοιχείο χρησιμοποιώντας το ' Max Heap δυαδικό δέντρο. Όπως σε αυτό το δέντρο, το μέγιστο στοιχείο βρίσκεται πάντα στον επάνω κόμβο του δέντρου που είναι γνωστό ως ' ρίζα 'κόμβος. Επιπλέον, προσφέρει αποτελεσματική εισαγωγή και διαγραφή στοιχείων διατηρώντας παράλληλα ταξινομημένη σειρά. Επιπλέον, ένα 'Max Heap' μπορεί εύκολα να εκτελέσει προγραμματισμένες εργασίες με βάση την προτεραιότητά τους ή άλλα κριτήρια.

Αυτό το άρθρο εξηγεί το ακόλουθο περιεχόμενο:







Πώς να χρησιμοποιήσετε το Max Heap στην Java;

ΕΝΑ ' Max Heap ” χρησιμοποιείται ως η υποκείμενη δομή δεδομένων για την υλοποίηση μιας ουράς προτεραιότητας. Στην ουρά προτεραιότητας, τα δεδομένα υποβάλλονται σε επεξεργασία με βάση την τιμή προτεραιότητας που τους έχει εκχωρηθεί. Μπορεί επίσης να χρησιμοποιηθεί για την αποτελεσματική ταξινόμηση των στοιχείων δεδομένων σε φθίνουσα σειρά.



Το 'Max Heap' μπορεί να δημιουργηθεί χρησιμοποιώντας δύο μεθόδους που περιγράφονται στο παρακάτω παράδειγμα κωδικοποιητή:



Μέθοδος 1: Χρησιμοποιήστε τη μέθοδο 'maxHeapify()'.

Ο ' maxHeapify() 'η μέθοδος δημιουργεί ένα ' Max Heap ” από μια υπάρχουσα συλλογή στοιχείων μετασχηματίζοντας δομές δεδομένων. Επιπλέον, αυτή η μέθοδος βοηθά στην τροποποίηση του αρχικού πίνακα στη θέση του, μειώνοντας την ανάγκη για πρόσθετη μνήμη.





Για παράδειγμα, επισκεφτείτε τον παρακάτω κώδικα για να δημιουργήσετε ένα ' Max Heap ' χρησιμοποιώντας τη μέθοδο 'maxHeapify()':

εισαγωγή java.util.ArrayList;
εισαγωγή java.util.Collections;
εισαγωγή java.util.List;

δημόσια τάξη MaxHeapifyExam {
δημόσιο στατικό κενό κύριο ( Σειρά [ ] args ) // δημιουργία κύριας ( ) μέθοδος
{
Λίστα < Ακέραιος αριθμός > testsEle = νέα ArrayList <> ( ) ;
testEle.προσθήκη ( 5 ) ;
testEle.προσθήκη ( 3 ) ;
testEle.προσθήκη ( 8 ) ;
testEle.προσθήκη ( 2 ) ;
testEle.προσθήκη ( 1 ) ;
testEle.προσθήκη ( 7 ) ;
System.out.println ( 'Αρχική λίστα:' + δοκιμές ) ;
maxHeapify ( ΤΕΣΤ ) ;
System.out.println ( 'The Max Heap Generated:' + δοκιμές ) ;
}

ιδιωτικό στατικό κενό maxHeapify ( Λίστα < Ακέραιος αριθμός > ΤΕΣΤ ) {
int k = testEle.μέγεθος ( ) ;
Για ( int i = k / 2 - 1 ; Εγώ > = 0 ; Εγώ-- ) {
συσσωρεύω ( δοκιμέςEle, k, i ) ;
}
}

Ιδιωτικό στατικό κενό heapify ( Λίστα < Ακέραιος αριθμός > δοκιμέςEle, int k, int i ) {
int μεγαλύτερο = i;
int αριστερή πλευρά = 2 * εγώ + 1 ;
int rightSide = 2 * εγώ + 2 ;
αν ( αριστερή πλευρά < κ && testEle.get ( αριστερή πλευρά ) > testEle.get ( μεγαλύτερη ) ) {
μεγαλύτερο = αριστερή πλευρά;
}
αν ( σωστη πλευρα < κ && testEle.get ( σωστη πλευρα ) > testEle.get ( μεγαλύτερη ) ) {
μεγαλύτερο = δεξιά πλευρά;
}
αν ( μεγαλύτερη ! = θ ) {
Collections.swap ( testsEle, i, μεγαλύτερο ) ;
συσσωρεύω ( δοκιμέςEle, k, μεγαλύτερο ) ;
}
}
}



Επεξήγηση του παραπάνω κώδικα:

  • Πρώτον, η λίστα ' ΤΕΣΤ Το ' αρχικοποιείται με εικονικά στοιχεία δεδομένων στο ' κύριος() ” μέθοδο και εκτυπώθηκε στην κονσόλα.
  • Στη συνέχεια, η λίστα 'testEle' περνά στη συνάρτηση 'maxHeapify()' και, στη συνέχεια, η λίστα που επιστρέφεται εμφανίζεται στην κονσόλα.
  • Μετά το ' maxHeapify() Η μέθοδος ' αρχικοποιείται και το μέγεθος της παρεχόμενης λίστας ανακτάται χρησιμοποιώντας το ' Μέγεθος() 'μέθοδος.
  • Στη συνέχεια, χρησιμοποιήστε το ' Για ' βρόχος για να ορίσετε τη δομή του σωρού και να υπολογίσετε τη θέση κάθε κόμβου.
  • Τώρα, χρησιμοποιήστε το ' heapify() ' και ορίστε τη θέση για τους κόμβους 'πάνω', 'αριστερά' και 'δεξιά' εκχωρώντας τιμές στις μεταβλητές 'greater', 'leftSide' και 'rightSide', αντίστοιχα.
  • Μετά από αυτό, χρησιμοποιήστε πολλαπλά ' αν ' δηλώσεις υπό όρους για να ελέγξετε εάν το ' αριστερή πλευρά 'Ο κόμβος είναι μεγαλύτερος από τον ' σωστη πλευρα ” κόμβος και αντίστροφα. Στο τέλος, η μεγαλύτερη τιμή αποθηκεύεται στο ' μεγαλύτερη 'κόμβος.
  • Τέλος, το νέο « μεγαλύτερη Η τιμή του κόμβου ελέγχεται με την ήδη αποθηκευμένη τιμή στο μεγαλύτερη ” μεταβλητή κόμβου. Και το ' ανταλαγή() Η συνάρτηση ' λειτουργεί αναλόγως για να ορίσει τη μεγαλύτερη τιμή στο ' μεγαλύτερη ” μεταβλητή.

Μετά το τέλος της φάσης εκτέλεσης:

Το στιγμιότυπο δείχνει ότι ο μέγιστος σωρός δημιουργείται χρησιμοποιώντας το ' maxHeapify() μέθοδος στην Java.

Μέθοδος 2: Χρησιμοποιήστε τη μέθοδο 'Collections.reverseOrder()'.

Ο ' Collections.reverseOrder() Η μέθοδος προσφέρει μια απλή και συνοπτική μέθοδο για τη δημιουργία ενός Max Heap ” ταξινομώντας τη συλλογή με αντίστροφη σειρά. Αυτό επιτρέπει την επαναχρησιμοποίηση του κώδικα και αποφεύγει την ανάγκη εφαρμογής του προσαρμοσμένου ' συσσωρεύω λογική, όπως φαίνεται στο παρακάτω απόσπασμα κώδικα:

εισαγωγή java.util.ArrayList;
εισαγωγή java.util.Collections;
εισαγωγή java.util.List;

δημόσια κλάση ReverseOrderExample {
δημόσιο στατικό κενό κύριο ( Σειρά [ ] args ) // δημιουργία κύριας ( ) μέθοδος
{
Λίστα < Ακέραιος αριθμός > testsEle = νέα ArrayList <> ( ) ;
testEle.προσθήκη ( 5 ) ;
testEle.προσθήκη ( 38 ) ;
testEle.προσθήκη ( 98 ) ;
testEle.προσθήκη ( 26 ) ;
testEle.προσθήκη ( 1 ) ;
testEle.προσθήκη ( 73 ) ;
System.out.println ( 'Αρχική λίστα:' + δοκιμές ) ;
Συλλογές.ταξινόμηση ( testsEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'The Max Heap Generated:' + δοκιμές ) ;
}
}

Επεξήγηση του παραπάνω κώδικα:

  • Πρώτα, εισαγάγετε το ' ArrayList », « Συλλογές ' και ' Λίστα ” βοηθητικά προγράμματα στο αρχείο Java.
  • Στη συνέχεια, δημιουργήστε ένα ' Λίστα 'με όνομα' ΤΕΣΤ ” και εισαγάγετε εικονικά στοιχεία στη λίστα.
  • Στη συνέχεια, το « είδος() Η μέθοδος ' χρησιμοποιείται για να ταξινομήσει τα στοιχεία δεδομένων σε αύξουσα σειρά και να περάσει τη λίστα ως παράμετρο κατά μήκος του ' Collections.reverseOrder() 'μέθοδος. Αυτό κάνει την ταξινόμηση του ' ΤΕΣΤ » λίστα με αντίστροφη σειρά.

Μετά το τέλος της φάσης εκτέλεσης:

Το στιγμιότυπο δείχνει ότι το 'Max Heap' δημιουργείται και ταξινομείται χρησιμοποιώντας τη μέθοδο 'Collections.reverseOrder()'.

συμπέρασμα

Δημιουργώντας ένα « Max Heap ”, οι χρήστες μπορούν να χρησιμοποιήσουν τις μεθόδους “maxHeapify()” και “Collections.reverseOrder()”. Διαχειρίζονται μια συλλογή στοιχείων με τρόπο που επιτρέπει γρήγορη πρόσβαση στο μέγιστο στοιχείο και αποτελεσματική διατήρηση μιας ταξινομημένης σειράς. Εξαρτάται αποκλειστικά από τις συγκεκριμένες απαιτήσεις και το επίπεδο ελέγχου που απαιτείται στη διαδικασία δημιουργίας σωρού.