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

בהינתן שלם חיובי , הציעו מבנה נתונים שבאמצעותו ניתן לבצע את הפעולות הבאות בזמנים הנדרשים ( מציין את מספר האיברים של ):

  • : בניית המבנה מתוך סדרה של איברים ממוינים; זמן הריצה:
  • : הכנסת איבר חדש בעל המפתח למבנה ; זמן הריצה:
  • : מחיקת האיבר שאליו מצביע מהמבנה ; זמן הריצה:
  • : מציאת העוקב ה- של האיבר שאליו מצביע ; זמן הריצה:


הסבר: העוקב ה- של איבר נתון ב- מוגדר באופן רקורסיבי: העוקב הראשון הוא העוקב הרגיל; העוקב ה- הוא העוקב הרגיל של העוקב ה-.

הערה: נתון מראש אך אין להתייחס אליו כקבוע בניתוח הזמנים.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמבחן סמסטר ב · 2021 · סמסטר ב
★★★★★
עצי חיפושסיבוכיותמבני נתוניםרשימות מקושרות
חשבו על עץ חיפוש בינרי מאוזן (כגון AVL או עץ אדום-שחור), שבו כל צומת מחזיק מצביע נוסף ל-D-SUCCESSOR שלו. בנייה ממערך ממוין אפשרית ב-. עדכון מצביעי ה-D-SUCCESSOR בזמן INSERT/DELETE דורש עדכונים.
המבנה המוצע: עץ חיפוש בינרי מאוזן (AVL / Red-Black Tree) עם שדה נוסף בכל צומת: מצביע לעוקב ה- שלו.

בנוסף, נשמור רשימה מקושרת דו-כיוונית של כל האיברים בסדר ממוין (in-order), כך שלכל צומת יש גם מצביע לעוקב ולקודם ברשימה.

BUILD():
הקלט ממוין. בונים עץ AVL מאוזן ממערך ממוין ב-
(בנייה רקורסיבית: האמצעי הוא השורש, חצי שמאלי תת-עץ שמאלי, חצי ימני תת-עץ ימני). במקביל בונים את הרשימה המקושרת. לכל צומת , ה- שלו הוא הצומת ה- מקומות קדימה ברשימה – ניתן לחשב זאת בסריקה אחת ב-.
סה"כ:
.

D-SUCCESSOR(, ):
פשוט מחזירים
. זמן: .

INSERT(, ):
1. הכנסה רגילה לעץ AVL ב-
.
2. מוצאים את העוקב והקודם של
ברשימה (זמינים מהעץ) ומכניסים את לרשימה.
3. עדכון מצביעי
: יש לעדכן את של הצמתים שלפני ברשימה, ולקבוע את של עצמו. סה"כ עדכונים, כשכל עדכון הוא (הולכים ברשימה).
סה"כ:
.

DELETE(, ):
1. מחיקה רגילה מעץ AVL ב-
.
2. מסירים את
מהרשימה המקושרת.
3. עדכון מצביעי
: הצמתים שלפני ברשימה צריכים עדכון של ה- שלהם (כל אחד "מקפיץ" מעבר ל-). סה"כ עדכונים.
סה"כ:
.

נכונות: כל הפעולות שומרות על תכונות העץ המאוזן, על הרשימה הממוינת, ועל נכונות מצביעי ה-.