הבן כיצד ליישם ערמה בינארית בג'אווה



מאמר זה יספק לך ידע מפורט ומקיף כיצד ליישם ערמה בינארית ב- Java עם דוגמאות.

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

אורך המערך ב- javascript

להלן סדר היום של מאמר זה:





  1. מה זה מיון ערימה?
  2. מקס הערמה
  3. מיני ערימה
  4. יישום ערימה בג'אווה
    • תרשים
    • קוד

בואו נתחיל!

מה זה מיון ערימה?

ערמה היא בעצם מבנה נתונים מבוסס עץ. יש לו צמתים. הצומת מורכב מאלמנטים מסוימים. כל צומת מכיל אלמנט אחד.



בצמתים עשויים להיות ילדים. אם במקרה אין ילדים, זה נקרא עלה.

ישנם שני כללים שיש לעקוב אחריהם:

  • הערך של כל צומת חייב להיות קטן או שווה לכל הערכים השמורים בילדיו.
  • יש לו את הגובה הכי פחות אפשרי.

ערימות יעילות ביותר בהפקת ה-האלמנט הפחות או הגדול ביותר.



בואו נעבור עכשיו לערימה מינימלית!

מיני ערימה

ערימה מינימלית היא עץ בינארי שלם בו ערך אלמנט השורש קטן או שווה לאחד מאלמנט הצאצא.

ייצוג מיני ערימה

Arr [(i-1) / 2]: זה יחזיר את צומת האב.

מה זה * ב- sql

Arr [(2 * i) + 1]: זה יחזיר את צומת הילד השמאלי.

Arr [(2 * i) + 2]: זה יחזיר את צומת הילד הנכון.

ישנן שיטות מסוימות של Min Heap:

  • לְהַכנִיס(): נוסף מפתח בקצה העץ. במקרה שהמפתח החדש גדול יותר מההורה, אין צורך לעשות דבר, אחרת עלינו לעבור כדי להגדיר את נכס הערימה.
  • getMin (): שיטות אלה עוזרות להחזיר את אלמנט השורש.
  • extractMin (): שיטה זו מחזירה את המינימוםאֵלֵמֶנט.

עוברים עכשיו ל Max Max.

מקסימום ערימה

ערימת מקסימום היא עץ בינארי שלם בו ערך אלמנט השורש גדול או שווה לאחד מאלמנט הצאצא.

הערימה המקסימלית מורכבת מכמה שיטות מדי!

  • הכנס (): זה יכניס אלמנט לערמה.
  • לִמְחוֹק() : זה ימחק אלמנט מהערימה.
  • FindMax (): הוא ימצא את האלמנט המרבי מהגבעה.
  • printHeap (): זה ידפיס את תוכן הערימה

עכשיו תן לי להראות לך את יישום הערימה באמצעות תרשים ומאוחר יותר ג'אווהקוד.

יישום ערימה בג'אווה

תרשים:

Heap

מבנה בסיסי של תוכנית Java

התרשים שלמעלה מציג את הערימה הבינארית ב- Java. כפי שלמדת שיש שני ערמות: מיני ערימה ומקס ערמה, הנה תרשים:

כעת, כשעבר לפלח הבא שלנו, נראה כיצד ליישם ערימה בינארית בג'אווה.

קוד:

class public BinaryHeap {private static final int d = 2 private int [] heap private int heapSize / ** * זה יאותחל את הערימה שלנו עם גודל ברירת המחדל. * / public BinaryHeap (קיבולת int) {heapSize = 0 heap = int int [קיבולת + 1] Arrays.fill (heap, -1)} / ** * זה יבדוק אם הערימה ריקה או לא * מורכבות: O ( 1) * / בוליאני ציבורי isEmpty () {return heapSize == 0} / ** * זה יבדוק אם הערימה מלאה או לא * מורכבות: O (1) * / בוליאני ציבורי isFull () {return heapSize == heap .length} הורה פרטי int (int i) {return (i-1) / d} private int kthChild (int i, int k) {return d * i + k} / ** * זה יכניס אלמנט חדש ל heap * מורכבות: O (יומן N) * כתרחיש במקרה הגרוע ביותר, עלינו לעבור עד לשורש * / insert public void (int x) {if (isFull ()) לזרוק NoSuchElementException חדש ('הערמה מלאה, אין מקום להכניס אלמנט חדש ') heap [heapSize ++] = x heapifyUp (heapSize-1)} / ** * זה ימחק אלמנט באינדקס x * מורכבות: O (יומן N) * * / public int delete (int x) {if (isEmpty ()) לזרוק NoSuchElementException חדש ('ערמה ריקה, אין אלמנט למחיקה') מפתח int = heap [x] heap [x] = heap [heapSize -1] heapSize - heapifyDown (x) retu מקש rn} / ** * שיטה זו משמשת לשמירה על מאפיין הערימה בעת הכנסת אלמנט. * * / פרטי חלל heapifyUp (int i) {int temp = heap [i] while (i> 0 && temp> heap [parent (i)]) {heap [i] = heap [parent (i)] i = parent (i)} ערימה [i] = temp} / ** * שיטה זו משמשת לתחזוקת מאפיין הערימה תוך מחיקת אלמנט. * * / פרטי ריק heapifyDown (int i) {int child int temp = heap [i] while (kthChild (i, 1)heap [rightChild]? leftChild: rightChild} / ** * שיטה זו משמשת להדפסת כל האלמנטים של הערימה * * / public void printHeap () {System.out.print ('nHeap =') עבור (int i = 0 i

בכך אנו מגיעים לסוף מאמר זה בנושא ערימה בינארית בג'אווה. בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון לתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות ג'אווה שונות כמו Hibernate & Spring.

יש לך שאלה עבורנו? אנא הזכיר זאת בקטע ההערות בבלוג 'Java ArrayList' ונחזור אליך בהקדם האפשרי.