Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

- אמיר רובינשטיין1 ערימת מינימום - Heap 1. הגדרה : מבנה נתונים שמוגדרות עליו הפעולות הבאות : Make_heap – בניית ערימה מ - n איברים מהקלט. Insert(x)

Liknende presentasjoner


Presentasjon om: "- אמיר רובינשטיין1 ערימת מינימום - Heap 1. הגדרה : מבנה נתונים שמוגדרות עליו הפעולות הבאות : Make_heap – בניית ערימה מ - n איברים מהקלט. Insert(x)"— Utskrift av presentasjonen:

1 - אמיר רובינשטיין1 ערימת מינימום - Heap 1. הגדרה : מבנה נתונים שמוגדרות עליו הפעולות הבאות : Make_heap – בניית ערימה מ - n איברים מהקלט. Insert(x) – הכנסת איבר x לערימה. Find_min – מציאת המינימום. Del_min – הוצאת המינימום מהערימה. 2. שימושים : תור עדיפויות, מיון ערימה (heap sort) מימושים : א. עץ חיפוש מאוזן עם מצביע למינימום שמתעדכן בהכנסה / הוצאה. ב. עץ כמעט שלם מימוש ע " י מערך מימוש ע " י עץ

2 - אמיר רובינשטיין2 א. מימוש ערימה כעץ חיפוש מאוזן Make_heap – הכנס לעץ את כל n האיברים O(nlogn) Insert(x) – הכנס את x לעץ, אם צריך עדכן את המינימום. O(logn) Find_min – החזר את הערך המוצבע ע " י המצביע למינימום. O(1) Del_min – הוצא את המינימום מהעץ ומצא מינימום חדש. O(logn) מימוש ערימה כעץ כמעט שלם משפר את סיבוכיות Make_heap ל - O(n). 3. מימושים : א. עץ חיפוש מאוזן עם מצביע למינימום שמתעדכן בהכנסה / הוצאה. ב. עץ כמעט שלם מימוש ע " י מערך מימוש ע " י עץ

3 - אמיר רובינשטיין3 עץ כמעט שלם עץ שלם – עץ בינארי בו לכל צומת פנימי בדיוק שני בנים, וכל העלים בעץ באותה רמה. עץ כמעט שלם – עץ שלם שבו חסרים ( אולי ) צמתים אחרונים. נמספר את הצמתים משמאל לימין ומלמעלה למטה. נקרא למספרים אלו אינדקסים.

4 - אמיר רובינשטיין4 תכונות של עץ כמעט שלם אם מספר הצמתים בעץ הוא n, וגובהו של העץ הוא h, מתקיים : מכאן. מספר העלים בעץ הינו, ומספר הצמתים הפנימיים. אינדקס השורש תמיד 1. עבור צומת i – אינדקס בנו השמאלי הוא 2i ובנו הימני 2i+1. לכן צומת הוא בן שמאלי אם"ם יש לו אינדקס זוגי. עבור צומת i – האינדקס של אביו הוא. העלה האחרון הוא בעל אינדקס n. צומת חדש שיוכנס יקבל את האינדקס n+1. צומת i הוא עלה אם"ם 2i > n.

5 - אמיר רובינשטיין5 ב. מימוש ערימה כעץ כמעט שלם מימוש במערך בעץ בינארי תכונת הערימה ( מינימום ) – כל בן גדול מאביו. תכונות מימוש במערך ( אם ידוע חסם על מספר האיברים בערימה ). - אינדקסים של הצמתים ישמשו כאינדקסים של כניסות המערך. - ניתן להגיע מבן לאב ולהפך ב - O(1). - מקום פנוי בערימה להוספת איברים נמצא תמיד בסוף המערך. - נשמור גם את מספר האיברים שיש בערימה ( תאים מנוצלים במערך ). Make_heap – נכניס את n האיברים למערך. נעבור על כל הצמתים הפנימיים מהאחרון עד לשורש ( כלומר מהאינדקס עד ל - 0 ) ונבצע Sift_Down לכל צומת. Insert(x) – איבר חדש יוכנס במקום הפנוי הראשון של המערך, ולאחר מכן יש לבצע Sift_Up לאורך המסלול החל מהצומת החדש עד לשורש. Del_min – נחליף את הערכים בין השורש לעלה האחרון. נמחק את העלה ונבצע Sift_Down החל מהשורש. Find_min – יש להחזיר את ערכו של השורש ( אינדקס 0). O(n) logn O(1)

6 - אמיר רובינשטיין6 Make heap

7 - אמיר רובינשטיין7 Insert

8 - אמיר רובינשטיין8 Del_min

9 - אמיר רובינשטיין ב. מימוש ערימה כעץ כמעט שלם מימוש במערך בעץ בינארי עץ בינארי נחזיק גם מצביע לעלה האחרון בעץ. - מאפשר מציאת המקום להכנסה ב - O(logn). מהם השינויים במימוש הפעולות מהמימוש ע " י מערך ? Make_heap – נעבור על הצמתים הפנימיים בסדר postorder ( כדי שבנים יטופלו לפני הוריהם ). Insert(x) – המקום הפנוי להכנסה יימצא ע " י המצביע לעלה האחרון ב - O(logn): נעלה ממנו עד לצומת ממנו אפשר לרדת ימינה, ואז כל הדרך שמאלה. Del_min – נחליף את הערכים בין השורש לעלה האחרון באמצעות המצביע.

10 - אמיר רובינשטיין10 שאלה : נתון עץ כמעט שלם הממומש ע " י עץ דינאמי. איך מוצאים צומת בעץ בעל אינדקס i ? פתרון : נסתכל על הייצוג הבינארי של האינדקס שאנו מחפשים i. למשל : 9=1001. נצעד מהשורש במורד העץ באופן הבא : לכל ביט בייצוג הבינארי החל מהביט השני עבור 0 נרד שמאלה, עבור 1 נרד ימינה.

11 - אמיר רובינשטיין11 עץ כמעט שלם ( כמערך או עץ ) עץ חיפוש מאוזן O(n)O(nlogn)Make_heap O(logn) Insert(x) O(1) Find_min O(logn) Del_min לסיכום:

12 - אמיר רובינשטיין12 תרגיל 1: נתונה רשימה מקושרת של מספרים ממשיים וידוע גם ערך החציון. יש לממש את הפעולות הבאות : init – אתחול מבנה הנתונים ב - O(m), m מספר האיברים ברשימה. insert(x) – הוסף את x למבנה ב - O(logn), n מספר האיברים במבנה. find_mid – החזר את ערך החציון ב - O(1). del_mid – הוצא את החציון מהמבנה ב - O(logn). פתרון : ערימת מינימוםערימת מקסימום של האיברים הגדוליםשל האיברים הקטנים L S

13 - אמיר רובינשטיין13 פתרון : ערימת מינימוםערימת מקסימום של האיברים הגדוליםשל האיברים הקטנים l=|L|s=|S| Init – ערך החציון ידוע לכן נחלק ב - O(m) את האיברים לשתי קבוצות : קטנים וגדולים / שווים מהחציון. לאחר מכן נריץ make_heap מכל קבוצה. O(m)+2O(m/2)=O(m). ח find_mid - החזר את ערך השורש הערימה הימנית L, O(1). insert(x) – אם x קטן מהחציון, נכניס אותו ל - S, אחרת ל - L. נעדכן את גדלי הערמות. אם |S|=|L|+1 נעביר את השורש של S ל - L. אם |S|=|L| -2 נעביר את השורש של L ל - S. ה del_mid – הוצא את השורש של L. אם |S|=|L|+1 נעביר את השורש של S ל - L. שתי הפעולות האחרונות במקרה הגרוע :

14 - אמיר רובינשטיין14 תרגיל 2: תאר מבנה נתונים המאפשר ביצוע הפעולות הבאות בסיבוכיות הנדרשת : init – אתחול מבנה הנתונים – O(n). insert(x) – הוסף את x למבנה – O(logn). find_min – החזר את המינימום – O(1). find_max – החזר את המקסימום – O(1). del_min – הוצא את המינימום מהמבנה – O(logn). del_max – הוצא את המקסימום מהמבנה – O(logn). פתרון : נשמור את האיברים בשתי ערמות בו זמנית : ערימת מינימום וערימת מקסימום. בין כל שני איברים " תאומים " בשתי הערימות יהיו מצביעים הדדיים

15 - אמיר רובינשטיין15 del_min: נמחק את השורש של ערימה המינימום ואת הצומת ה " תאום " מערימת המקסימום. אבחנה : הצומת התאום של שורש ערימה אחת הוא עלה בערימה השניה. כיצד מוחקים עלה מערימה ? - מחליפים בינו לבין העלה האחרון - מוחקים את העלה האחרון - מבצעים Sift_Up מהמקום המקורי של הצומת שנמחק

16 - אמיר רובינשטיין16 תרגיל 2: פתרון שני : נשמור את האיברים בערימת מינימום. בכל צומת יהיה שדה נוסף max, שישמור את הערך המקסימלי בתת העץ של הצומת ( כולל הצומת עצמו ). init – בצע Make_Heap ואח"כ סיור Postorder לחישוב שדות ה- max. O(n). insert(x) – הכנס את x לערימה ועדכן את שדות max במסלול מלמטה עד לשורש. O(logn). find_min – החזר את ערך השורש. O(1). find_max – החזר את ערך max של השורש. O(1). del_min – הוצא את השורש. עדכן את שדות max לאורך 2 מסלולים: המסלול מהעלה האחרון (זה שנמחק) עד לשורש, והמסלול של ה- Sift_Down מהשורש למטה. O(logn). del_max – נמצא את צומת המקסימום כך: מהשורש נרד כל פעם לבן המקסימלי עד שנגיע לעלה. כעת נמחק צומת זה ע"י החלפתו עם העלה האחרון, ו- Sift_Up. נעדכן שדות ה- max לאורך 2 מסלולים. O(logn)


Laste ned ppt "- אמיר רובינשטיין1 ערימת מינימום - Heap 1. הגדרה : מבנה נתונים שמוגדרות עליו הפעולות הבאות : Make_heap – בניית ערימה מ - n איברים מהקלט. Insert(x)"

Liknende presentasjoner


Annonser fra Google