שאלת מבחן במבוא למדעי המחשב - אוניברסיטת תל אביב 2013 - חיפוש בינארי
נתונה פונקציה
א. (10 נקודות) כתבו פונקציה
ב. (10 נקודות) כתבו פונקציה
guess(x) שמקבלת מספר שלם ומחזירה ">" אם המספר הסודי גדול מ-, "<" אם הוא קטן מ-, ו-"=" אם הוא שווה ל-.א. (10 נקודות) כתבו פונקציה
find_secret(N1, N2) שמוצאת את המספר הסודי, בהינתן שהוא נמצא בטווח , באמצעות חיפוש בינארי.ב. (10 נקודות) כתבו פונקציה
find_secret2() שמוצאת את המספר הסודי כאשר אין חסם עליון ידוע — המספר הסודי הוא מספר טבעי חיובי כלשהו.העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת תל אביבמועד ב2013סמסטר ב
★★★★★
חיפוש בינאריחיפוש
בסעיף א' השתמשו בחיפוש בינארי רגיל. בסעיף ב', מצאו תחילה חסם עליון על ידי הכפלת הטווח (doubling) — התחילו עם והכפילו את שני הגבולות עד שהמספר הסודי נמצא בטווח, ואז הפעילו
find_secret.סעיף א':
חיפוש בינארי רגיל: בכל צעד שואלים על האמצע, ומצמצמים את הטווח בהתאם. סיבוכיות: .
סעיף ב':
שלב 1 — מציאת חסם (doubling): מתחילים עם ומכפילים את שני הגבולות כל פעם. אחרי צעדים, . נעצרים כש-
שלב 2 — חיפוש בינארי: מפעילים
סיבוכיות כוללת: .
חיפוש בינארי רגיל: בכל צעד שואלים על האמצע, ומצמצמים את הטווח בהתאם. סיבוכיות: .
סעיף ב':
שלב 1 — מציאת חסם (doubling): מתחילים עם ומכפילים את שני הגבולות כל פעם. אחרי צעדים, . נעצרים כש-
guess(high) מחזיר "<" או "=". אם המספר הסודי הוא , צריך צעדי הכפלה.שלב 2 — חיפוש בינארי: מפעילים
find_secret(low, high) על הטווח שנמצא. סיבוכיות: גם כאן.סיבוכיות כוללת: .