שאלת מבחן במבני נתונים ומבוא לאלגוריתמים - האוניברסיטה הפתוחה 2021 - ערימות
ברצוננו לבנות ערמת מינימום בת איברים; לכל איבר בערמה נוסף שדה המאחסן את הערך המכסימלי בתת-ערמה המושרשת ב-.
הראו כיצד ניתן לשנות את השגרה BUILD-HEAP() כך שבניית הערמה המכילה את השדות עדיין תתבצע בזמן ליניארי.
הראו כיצד ניתן לשנות את השגרה BUILD-HEAP() כך שבניית הערמה המכילה את השדות עדיין תתבצע בזמן ליניארי.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
שאלה חוזרתהאוניברסיטה הפתוחהמבחן סמסטר ב2021 סמסטר ב | 2021 סמסטר ב
★★★★★
ערימותסיבוכיות
בעת ביצוע HEAPIFY מלמטה למעלה, ניתן לעדכן את של כל צומת לפי ה- של ילדיו. חשבו כיצד לשלב זאת בתוך BUILD-HEAP ללא תוספת זמן אסימפטוטית.
הרעיון: בשגרת BUILD-HEAP, עוברים על הצמתים מלמטה למעלה (מ- עד 1) ומבצעים HEAPIFY. נשנה את HEAPIFY כך שבנוסף לתיקון תכונת הערמה, גם יעדכן את .
שינוי BUILD-HEAP:
1. ראשית, לכל עלה : (זמן סה"כ).
2. בלולאה של BUILD-HEAP, עבור כל צומת מ- עד 1:
- בצע HEAPIFY(, ) כרגיל.
- לאחר מכן, עדכן: (כאשר קיימים ילדים).
למעשה, ניתן לשלב את עדכון ה- בתוך HEAPIFY עצמו: בכל שלב של HEAPIFY, לאחר שהאלמנט "שוקע" למקומו, מעדכנים את שלו.
מכיוון שהעיבוד מתבצע מלמטה למעלה, כאשר מגיעים לצומת , כל הצמתים בתת-העצים שלו כבר עודכנו, ולכן ערכי של הילדים נכונים.
זמן ריצה: בכל צומת, עדכון לוקח נוסף. סה"כ התוספת היא , ומכיוון ש-BUILD-HEAP המקורי רץ ב-, הזמן הכולל נותר .
שינוי BUILD-HEAP:
1. ראשית, לכל עלה : (זמן סה"כ).
2. בלולאה של BUILD-HEAP, עבור כל צומת מ- עד 1:
- בצע HEAPIFY(, ) כרגיל.
- לאחר מכן, עדכן: (כאשר קיימים ילדים).
למעשה, ניתן לשלב את עדכון ה- בתוך HEAPIFY עצמו: בכל שלב של HEAPIFY, לאחר שהאלמנט "שוקע" למקומו, מעדכנים את שלו.
מכיוון שהעיבוד מתבצע מלמטה למעלה, כאשר מגיעים לצומת , כל הצמתים בתת-העצים שלו כבר עודכנו, ולכן ערכי של הילדים נכונים.
זמן ריצה: בכל צומת, עדכון לוקח נוסף. סה"כ התוספת היא , ומכיוון ש-BUILD-HEAP המקורי רץ ב-, הזמן הכולל נותר .