כיצד להשתמש ב-Max Heap ב-Java?

Kyzd Lhstms B Max Heap B Java



המתכנת יכול בקלות לאחזר את הרכיב המקסימלי על ידי שימוש ב' מקס ערימה 'עץ בינארי. כמו בעץ זה, האלמנט המקסימלי נמצא תמיד בצומת העליון של העץ, המכונה ' שורש 'צומת. יתר על כן, הוא מציע הכנסה ומחיקה יעילה של אלמנטים תוך שמירה על סדר ממוין. בנוסף, 'Max Heap' יכול בקלות לבצע עבודות מתוזמנות על סמך העדיפות שלהם או קריטריונים אחרים.

מאמר זה מסביר את התוכן הבא:







כיצד להשתמש ב-Max Heap ב-Java?

א ' מקס ערימה משמש כמבנה הנתונים הבסיסי ליישום תור עדיפות. בתור העדיפות, הנתונים מעובדים על סמך ערך העדיפות שהוקצה להם. זה יכול לשמש גם כדי למיין את רכיבי הנתונים בסדר יורד, ביעילות.



ניתן להפיק את ה-'Max Heap' בשתי שיטות המתוארות בדוגמה של ה-codec שלהלן:



שיטה 1: השתמש בשיטת 'maxHeapify()'.

ה ' maxHeapify() השיטה יוצרת ' מקס ערימה ' מאוסף קיים של אלמנטים על ידי שינוי מבני נתונים. יתרה מכך, שיטה זו מסייעת בשינוי המערך המקורי במקום ומפחיתה את הצורך בזיכרון נוסף.





לדוגמה, בקר בקוד שלהלן כדי ליצור ' מקס ערימה ' באמצעות שיטת 'maxHeapify()':

ייבוא ​​java.util.ArrayList;
ייבוא ​​java.util.Collections;
ייבוא ​​java.util.List;

מחלקה ציבורית MaxHeapifyExam {
ריק סטטי ציבורי ראשי ( חוּט [ ] args ) // יצירת ראשי ( ) שיטה
{
רשימה < מספר שלם > testsEle = ArrayList חדש <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 3 ) ;
testEle.add ( 8 ) ;
testEle.add ( 2 ) ;
testEle.add ( 1 ) ;
testEle.add ( 7 ) ;
System.out.println ( 'רשימה מקורית:' + מבחנים ) ;
maxHeapify ( בדיקות ) ;
System.out.println ( 'הערימה המקסימלית שנוצרה:' + מבחנים ) ;
}

ריק סטטי פרטי maxHeapify ( רשימה < מספר שלם > בדיקות ) {
int k = testEle.size ( ) ;
ל ( int i = k / 2 - 1 ; אני > = 0 ; אני-- ) {
להגביר ( testsEle, k, i ) ;
}
}

ריק סטטי פרטי להערים ( רשימה < מספר שלם > testsEle, int k, int i ) {
int greater = i;
int leftSide = 2 * אני + 1 ;
int rightSide = 2 * אני + 2 ;
אם ( צד שמאל < ק && testEle.get ( צד שמאל ) > testEle.get ( גדול יותר ) ) {
greater = leftSide;
}
אם ( צד ימין < ק && testEle.get ( צד ימין ) > testEle.get ( גדול יותר ) ) {
greater = rightSide;
}
אם ( גדול יותר ! = אני ) {
Collections.swap ( testsEle, אני, גדול יותר ) ;
להגביר ( testsEle, k, גדול יותר ) ;
}
}
}



הסבר על הקוד לעיל:

  • ראשית, הרשימה ' בדיקות ' מאותחל עם רכיבי נתוני דמה ב' רָאשִׁי() ' שיטת והודפס על הקונסולה.
  • לאחר מכן, רשימת 'testEle' מועברת לפונקציה 'maxHeapify()', ואז הרשימה המוחזרת מוצגת בקונסולה.
  • אז ה ' maxHeapify() שיטת ' מאוחזרת וגודל הרשימה המסופקת מאוחזר על ידי שימוש ב' גודל() ' שיטה.
  • לאחר מכן, השתמש ב' ל ” לולאה כדי להגדיר את מבנה הערימה ולחשב את המיקום של כל צומת.
  • כעת, השתמש ב' heapify() ' שיטת וקבע את המיקום עבור הצמתים 'העליון', 'השמאלי' וה'ימני' על ידי הקצאת ערכים למשתנים 'גדולים', 'צד שמאל' ו'צד ימין', בהתאמה.
  • לאחר מכן, השתמש במספר ' אם ' הצהרות מותנות כדי לבדוק אם ' צד שמאל צומת ' גדול יותר מהצומת ' צד ימין ' צומת ולהיפך. בסופו של דבר, הערך הגדול יותר נשמר ב-' גדול יותר 'צומת.
  • לבסוף, החדש ' גדול יותר ' ערך הצומת מסומן עם הערך שכבר מאוחסן ב' גדול יותר משתנה צומת. וה ' לְהַחלִיף() הפונקציה ' פועלת בהתאם כדי להגדיר את הערך הגדול ביותר ב' גדול יותר 'משתנה.

לאחר סיום שלב הביצוע:

תמונת המצב מראה שהערימה המקסימלית נוצרת באמצעות ' maxHeapify() 'שיטה ב-Java.

שיטה 2: השתמש בשיטת 'Collections.reverseOrder()'.

ה ' Collections.reverseOrder() שיטת ' מציעה שיטה פשוטה ותמציתית ליצור ' מקס ערימה ' על ידי מיון האוסף בסדר הפוך. זה מאפשר שימוש חוזר בקוד ומונע את הצורך ליישם את ' להגביר ' היגיון, כפי שמוצג בקטע הקוד שלהלן:

ייבוא ​​java.util.ArrayList;
ייבוא ​​java.util.Collections;
ייבוא ​​java.util.List;

מחלקה ציבורית ReverseOrderExample {
ריק סטטי ציבורי ראשי ( חוּט [ ] args ) // יצירת ראשי ( ) שיטה
{
רשימה < מספר שלם > testsEle = ArrayList חדש <> ( ) ;
testEle.add ( 5 ) ;
testEle.add ( 38 ) ;
testEle.add ( 98 ) ;
testEle.add ( 26 ) ;
testEle.add ( 1 ) ;
testEle.add ( 73 ) ;
System.out.println ( 'רשימה מקורית:' + testsEle ) ;
Collections.sort ( testsEle, Collections.reverseOrder ( ) ) ;
System.out.println ( 'הערימה המקסימלית שנוצרה:' + testsEle ) ;
}
}

הסבר על הקוד לעיל:

  • ראשית, ייבא את ' רשימת מערך ', ' אוספים ' ו' רשימה ' כלי עזר בקובץ Java.
  • לאחר מכן, צור ' רשימה 'שם' בדיקות ' והכנס רכיבי דמה לרשימה.
  • לאחר מכן, ה' סוג() שיטת ' משמשת כדי למיין את רכיבי הנתונים בסדר עולה ולהעביר את הרשימה כפרמטר לאורך ' Collections.reverseOrder() ' שיטה. זה הופך את המיון של ' בדיקות ' רשימה בסדר הפוך.

לאחר סיום שלב הביצוע:

תמונת המצב מראה ש-'Max Heap' נוצר וממוין באמצעות שיטת 'Collections.reverseOrder()'.

סיכום

על ידי יצירת ' מקס ערימה ', המשתמשים יכולים להשתמש בשיטות 'maxHeapify()' ו-'Collections.reverseOrder()'. הם מנהלים אוסף אלמנטים באופן המאפשר גישה מהירה לאלמנט המקסימלי ותחזוקה יעילה של הזמנה ממוינת. זה תלוי אך ורק בדרישות הספציפיות וברמת השליטה הדרושה על תהליך יצירת הערימה.