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

נתונים מערך של מספרים ממשיים ומספר טבעי המקיים . כתבו אלגוריתם הבודק האם קיים ב- איבר המקיים את שני התנאים הבאים:
(1)
מכיל לפחות איברים קטנים מ-;
(2)
מופיע יותר מ- פעמים ב-.
זמן הריצה הנדרש של האלגוריתם הינו
.
רמז: חשבו כיצד סעיף א' עשוי לעזור. שימו לב ש-
הוא לא חלק מהקלט.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמבחן סמסטר א · 2020 · סמסטר א
★★★★★
אלגוריתמיםסיבוכיותחיפושמיון
מצאו את האיבר ה- בגודלו בזמן (באמצעות SELECT). כל האיברים מעליו מהווים תת-מערך בגודל . חפשו בתת-מערך זה איבר שמופיע יותר מ- פעמים — זה בדיוק בעיית majority על מערך בגודל !
רעיון: תנאי (1) דורש ש- גדול מלפחות איברים, כלומר נמצא בין האיברים הגדולים ביותר. תנאי (2) דורש ש- מופיע יותר מ- פעמים — כלומר יותר ממחצית מתוך האיברים הגדולים.

האלגוריתם:

שלב 1: מצאו את האיבר ה- בגודלו (ה-order statistic) באמצעות אלגוריתם SELECT בזמן . נסמנו .

שלב 2: צרו מערך המכיל את כל האיברים ב- שגדולים או שווים ל-. גודלו (ואולי קצת יותר אם יש שוויונות, אבל ניתן לטפל בכך). זמן: .

שלב 3: הפעילו את אלגוריתם Boyer-Moore (מסעיף א') על כדי לבדוק האם קיים איבר המופיע יותר מ- פעמים ב-. זמן: .

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

סיבוכיות: כל שלב , סה"כ .