שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2012 - ערימות

הצע/י מבנה נתונים התומך בביצוע הפעולות הבאות בסיבוכיות הנדרשת: נתונה רשימת נתוני קלט ובה איברים.
a.
– בניית המבנה מרשימת נתוני הקלט בזמן
b.
– החזרת ערך מקסימלי בזמן
c.
– החזרת ערך מינימלי בזמן
d.
– מחיקת איבר מקסימלי בזמן
e.
– מחיקת איבר מינימלי בזמן
הסבר/י בקצרה כיצד תתבצע כל פעולה.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד ב2012סמסטר ב
ערימותערימה בינאריתתור עדיפויותסיבוכיות זמן
חשבו על שימוש בשתי ערימות במקביל, אחת לחיפוש מינימום ואחת לחיפוש מקסימום. כיצד ניתן לקשר בין האיברים בשתי הערימות כדי לאפשר מחיקה יעילה?
נשתמש במבנה נתונים המורכב משני מבנים אחרים: ערימת מינימום () וערימת מקסימום (). שתי הערימות יכילו את כל האיברים מהרשימה .\nכדי לאפשר מחיקה יעילה של איבר מערימה אחת כאשר הוא נמחק מהשנייה, כל איבר בערימה אחת יחזיק מצביע לאיבר התואם לו בערימה השנייה. כלומר, כל איבר (צומת) במבנה יהיה רשומה המכילה את הערך עצמו, ומצביע לצומת המקביל בערימה השנייה.\n\nלהלן פירוט הפעולות:\n\na. Build(S,L)\nהבנייה תתבצע ב- באופן הבא:\n1. ניצור שני מערכים, ו-, בגודל . כל תא במערכים יכיל רשומה (צומת) עם שדה לערך ושדה למצביע.\n2. נעבור על רשימת הקלט . עבור כל איבר באינדקס : ניצור שתי רשומות עבור הערך . נמקם אחת ב- והשנייה ב-.\n3. נאתחל את המצביעים: עבור כל מ- עד , נגדיר שהמצביע ב- יצביע לכתובת של , והמצביע ב- יצביע לכתובת של . שלב זה לוקח .\n4. נהפוך את המערך לערימת מינימום ואת המערך לערימת מקסימום. פעולת ה-Heapify (בניית ערימה ממערך לא ממוין) מתבצעת בזמן . בכל פעם שמתבצעת החלפה (swap) בין שני איברים בערימה אחת במהלך בנייתה, נצטרך לעדכן את המצביעים ההדדיים באיברים המקבילים בערימה השנייה. פעולת החלפה כזו, הכוללת עדכון מצביעים, לוקחת . לכן, סיבוכיות ה-Heapify נשארת .\nהסיבוכיות הכוללת של הבנייה היא .\n\nb. Max(S)\nהערך המקסימלי נמצא תמיד בשורש של ערימת המקסימום, . ניתן לגשת אליו בזמן .\n\nc. Min(S)\nהערך המינימלי נמצא תמיד בשורש של ערימת המינימום, . ניתן לגשת אליו בזמן .\n\nd. delete-max(S)\n1. נמצא את האיבר המקסימלי בשורש של .\n2. נשתמש במצביע שברשומת השורש של כדי למצוא את מיקום האיבר התואם ב- בזמן .\n3. נמחק את שורש (פעולת delete-max סטנדרטית). פעולה זו כוללת החלפה עם האיבר האחרון ותיקון הערימה כלפי מטה (sift-down), ומתבצעת ב-.\n4. נמחק את האיבר התואם מ-. מכיוון שאנו יודעים את מיקומו, זוהי מחיקת איבר כלשהו מהערימה. פעולה זו מתבצעת גם היא על ידי החלפה עם האיבר האחרון ותיקון הערימה, ולוקחת .\nבכל החלפה המתבצעת בשתי הערימות, יש לעדכן את המצביעים ההדדיים כפי שהוסבר קודם (בזמן להחלפה). הסיבוכיות הכוללת היא .\n\ne. delete-min(S)\nהתהליך סימטרי ל-delete-max:\n1. נמצא את האיבר המינימלי בשורש של .\n2. נשתמש במצביע שבו כדי לאתר את האיבר התואם ב- ב-.\n3. נמחק את שורש ב-.\n4. נמחק את האיבר התואם מ- ב-.\nהסיבוכיות הכוללת היא .