prepd.

שאלת מבחן במבני נתונים ומבוא לאלגוריתמים - האוניברסיטה הפתוחה 2021 - ערימות

ברצוננו לבנות ערמת מינימום בת איברים; לכל איבר בערמה נוסף שדה המאחסן את הערך המכסימלי בתת-ערמה המושרשת ב-.

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

שינוי BUILD-HEAP:
1. ראשית, לכל עלה
: (זמן סה"כ).
2. בלולאה של BUILD-HEAP, עבור כל צומת
מ- עד 1:
- בצע HEAPIFY(
, ) כרגיל.
- לאחר מכן, עדכן:
(כאשר קיימים ילדים).

למעשה, ניתן לשלב את עדכון ה-
בתוך HEAPIFY עצמו: בכל שלב של HEAPIFY, לאחר שהאלמנט "שוקע" למקומו, מעדכנים את שלו.

מכיוון שהעיבוד מתבצע מלמטה למעלה, כאשר מגיעים לצומת
, כל הצמתים בתת-העצים שלו כבר עודכנו, ולכן ערכי של הילדים נכונים.

זמן ריצה: בכל צומת, עדכון
לוקח נוסף. סה"כ התוספת היא , ומכיוון ש-BUILD-HEAP המקורי רץ ב-, הזמן הכולל נותר .