prepd.

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

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

האלגוריתם:


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

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

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

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

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