שאלת מבחן במבוא למדעי המחשב - אוניברסיטת תל אביב 2013 - חיפוש בינארי

נתונה פונקציה guess(x) שמקבלת מספר שלם ומחזירה ">" אם המספר הסודי גדול מ-, "<" אם הוא קטן מ-, ו-"=" אם הוא שווה ל-.

א. (10 נקודות) כתבו פונקציה find_secret(N1, N2) שמוצאת את המספר הסודי, בהינתן שהוא נמצא בטווח , באמצעות חיפוש בינארי.

ב. (10 נקודות) כתבו פונקציה find_secret2() שמוצאת את המספר הסודי כאשר אין חסם עליון ידוע — המספר הסודי הוא מספר טבעי חיובי כלשהו.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת תל אביבמועד ב2013סמסטר ב
חיפוש בינאריחיפוש
בסעיף א' השתמשו בחיפוש בינארי רגיל. בסעיף ב', מצאו תחילה חסם עליון על ידי הכפלת הטווח (doubling) — התחילו עם והכפילו את שני הגבולות עד שהמספר הסודי נמצא בטווח, ואז הפעילו find_secret.
סעיף א':



חיפוש בינארי רגיל: בכל צעד שואלים על האמצע, ומצמצמים את הטווח בהתאם. סיבוכיות: .

סעיף ב':



שלב 1 — מציאת חסם (doubling): מתחילים עם ומכפילים את שני הגבולות כל פעם. אחרי צעדים, . נעצרים כש-guess(high) מחזיר "<" או "=". אם המספר הסודי הוא , צריך צעדי הכפלה.

שלב 2 — חיפוש בינארי: מפעילים find_secret(low, high) על הטווח שנמצא. סיבוכיות: גם כאן.

סיבוכיות כוללת: .