נתון זרם (stream) אינסופי של מספרים טבעיים מהצורה:
x1,x2,x3,…
בזרם קוראים את האיברים, לפי סדר הגעתם, פעם אחת ואז הם נעלמים, אלא אם כן שומרים אותם.
כמו כן, נתון מספר טבעי m.
נדרש לתכנן ולתחזק מבנה נתונים במקום O(m) התומך בפעולות הבאות:
א - MostFrequent()
מחזירה מספר טבעי אשר מופיע מספר הפעמים הגבוה ביותר מבין m האיברים האחרונים שנקלטו בזרם או לכל האיברים שנקלטו עד כה, אם טרם נקלטו m איברים.
זמן ריצה O(1).
ב - Frequency(x)
מקבלת מספר טבעי x, ומחזירה את מספר הפעמים ש-x מופיע מבין m האיברים האחרונים שנקלטו בזרם.
זמן ריצה O(logm).
סעיף א': (15 נקודות)
הציעו מבנה נתונים המשתמש במקום O(m) ותומך בפעולות מעלה (Frequency ו- MostFrequent) בזמנים המבוקשים.
המלצה: קראו את סעיף ב' לפני פתרון סעיף א'.
סעיף ב': (10 נקודות)
לכל קריאת תו חדש, ה-"m תווים האחרונים" משתנים.
הסבירו מה השינויים הדרושים במבנה נתונים שהצעתם כדי לעדכן את המבנה כדי שיהיה מוכן לענות על שאילתות של סעיף א'.
נתחו את זמן הריצה של הצעתכם.