שאלת מבחן במבוא למדעי המחשב - אוניברסיטת תל אביב 2016 - חיפוש בינארי
רשימה של מספרים שונים זה מזה תיקרא רשימה בי-טונית (bitonic list) אם קיים אינדקס כך שכל האיברים עד לאינדקס (כולל) מופיעים בסדר עולה ממש, וכל האיברים החל מאינדקס מופיעים בסדר יורד ממש.
לדוגמא: הרשימות
א. השלימו את מימוש הפונקציה
דוגמת הרצה:
ב. השלימו את השורות החסרות בפונקציה
תזכורת:
דוגמת הרצה:
ג. מיכל מציעה להשתמש בפונקציה
1. מיכל צודקת
2. אמיר צודק
3. עמירם צודק
סיבוכיות
סיבוכיות
לדוגמא: הרשימות
[1, 2, 3, 4], [-3, 1, 2, 3, 80, 100, 6] הן רשימות בי-טוניות.א. השלימו את מימוש הפונקציה
find_maximum שמקבלת כקלט רשימה בי-טונית של מספרים שונים זה מזה, ומחזירה את האינדקס שבו מתקבל הערך המקסימלי. הפונקציה היא פונקציית מעטפת שמבצעת קריאה לפונקציה רקורסיבית find_maximum_helper. על סיבוכיות הזמן במקרה הגרוע להיות .דוגמת הרצה:
>>> find_maximum([-3, 1, 2, 3, 80, 100, 6]) 5
ב. השלימו את השורות החסרות בפונקציה
sort_bitonic_list(blst), שמקבלת כקלט רשימה בי-טונית blst, ומחזירה רשימה חדשה שאיבריה הם איברי blst ממויינים מקטן לגדול. השתמשו בפונקציה מסעיף א' ובפונקציה merge מהכיתה.תזכורת:
merge מקבלת שתי רשימות ממוינות ויוצרת ביעילות רשימה חדשה ממוינת.דוגמת הרצה:
>>> sort_bitonic_list([-3, 1, 2, 3, 80, 100, 6]) [-3, 1, 2, 3, 6, 80, 100]
ג. מיכל מציעה להשתמש בפונקציה
mergesort (מיון מיזוג) שראינו בכיתה, לצורך מיון רשימה בי-טונית. אמיר חושב ש-mergesort איטי יותר, ועמירם טוען ששתי הפונקציות באותה סיבוכיות. סמנו מי צודק, וציינו מה הסיבוכיות במקרה הגרוע של שתי הפונקציות כתלות באורך הרשימה .1. מיכל צודקת
2. אמיר צודק
3. עמירם צודק
סיבוכיות
sort_bitonic_list: סיבוכיות
mergesort: העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת תל אביבמועד ב2016סמסטר א
★★★★★
חיפוש בינארירקורסיהמיוןסיבוכיות זמן
בסעיף א' חשבו על חיפוש בינארי — בדקו את האיבר האמצעי ואת שכנו כדי להחליט לאיזה חצי לרדת. בסעיף ב' מצאו את המקסימום, חלקו לשני חלקים ממויינים, ומזגו. בסעיף ג' השוו את הסיבוכיות של שני הפתרונות.
סעיף א':
הרעיון: חיפוש בינארי — בודקים את האיבר האמצעי. אם הוא קטן משכנו הימני, המקסימום בחצי הימני. אחרת, המקסימום בחצי השמאלי (כולל mid). סיבוכיות: .
סעיף ב':
מוצאים את אינדקס המקסימום . החלק
סעיף ג':
אמיר צודק (תשובה 2).
- סיבוכיות
- סיבוכיות
הרעיון: חיפוש בינארי — בודקים את האיבר האמצעי. אם הוא קטן משכנו הימני, המקסימום בחצי הימני. אחרת, המקסימום בחצי השמאלי (כולל mid). סיבוכיות: .
סעיף ב':
מוצאים את אינדקס המקסימום . החלק
blst[:k+1] כבר ממויין בסדר עולה. החלק blst[k+1:] בסדר יורד — הופכים אותו ומזגים. סיבוכיות: עבור merge + עבור find_maximum = .סעיף ג':
אמיר צודק (תשובה 2).
- סיבוכיות
sort_bitonic_list: - סיבוכיות
mergesort: sort_bitonic_list מנצלת את המבנה הבי-טוני ומבצעת merge יחיד ב-, בעוד mergesort לא מנצלת את המבנה ועובדת ב-.