- הגשות
- פתרונות
- פתרון רשמי
- תיאור
הציעו מבנה נתונים S אשר מתחזק \(n\) מספרים שונים זה מזה ותומך בשגרות הבאות בזמני הריצה המצוינים ליד כל שגרה:
Build(S,A)
: בניית המבנה S מתוך מערך ממוין A של \(n\) מספרים ייחודיים, בזמן ריצה של \(O(n)\).Insert(S,k)
: הכנסת המספר השלם \(k\) למבנה S, בזמן ריצה של \(O(\log n)\).Delete(S,x)
: מחיקת האיבר שאליו מצביע \(x\) מהמבנה S, בזמן ריצה של \(O(\log n)\).Search(S,k)
: חיפוש המפתח \(k\) במבנה S, בזמן ריצה של \(O(\log n)\).Median(S)
: החזרת חציון המפתחות במבנה S, בזמן ריצה של \(O(1)\).Between(S,k1,k2)
: החזרת כמות המפתחות \(k\) במבנה S המקיימים \(k_1 \le k \le k_2\), בזמן ריצה של \(O(\log n)\). (הערה: המפתחות \(k_1, k_2\) אינם בהכרח חלק מהמבנה S).
תארו את האלגוריתמים באופן מילולי ובקצרה, ונתחו את נכונותם וסיבוכיותם.
נסו להשתמש בעץ חיפוש בינארי מאוזן (כמו עץ אדום-שחור או AVL). חשבו איזה מידע נוסף יש לשמור בכל צומת ובמבנה עצמו כדי לתמוך בפעולות Median
ו-Between
ביעילות הנדרשת.