prepd.

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

נתון מערך מלא במספרים שלמים, שבו כל מספר מופיע פעמיים ברצף פרט למספר אחד שמופיע רק פעם אחת. המערך אינו ממוין.

לדוגמא, המערכים הבאים מקיימים את התנאי:
- a = {6, 6, 18, 18, -4, -4, 12, 9, 9} - המספר הבודד הוא 12 באינדקס 6

- b = {8, 8, -7, -7, 3, 3, 0, 0, 10, 10, 5, 5, 4} - המספר הבודד הוא 4 באינדקס 12

- c = {5} - המספר הבודד הוא 5 באינדקס 0


כתבו שיטה סטטית שמקבלת כפרמטר מערך שמקיים את התנאי הנ"ל, ומחזירה את המספר שמופיע במערך רק פעם אחת.
אתם יכולים להניח שהמערך אינו ריק ושהוא מקיים את התנאי, אין צורך לבדוק זאת.


חתימת השיטה היא:


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


מה סיבוכיות זמן הריצה של השיטה שכתבתם! הסבירו תשובתכם.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחה832018סמסטר ב
מערכיםחיפוש בינאריסיבוכיות זמןסיבוכיות מקוםשיטות סטטיות
שימו לב שכל מספר מופיע פעמיים ברצף. אם המספר הבודד נמצא לפני אינדקס מסוים, הזוגות אחריו יתחילו באינדקס אי-זוגי. השתמשו בחיפוש בינארי.
רעיון הפתרון: נשתמש ב-חיפוש בינארי. התובנה המרכזית: לפני המספר הבודד, כל זוג מתחיל באינדקס זוגי. אחרי המספר הבודד, כל זוג מתחיל באינדקס אי-זוגי.



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

הסבר: בכל שלב בודקים את האינדקס הזוגי mid. אם a[mid] == a[mid+1] אז הזוג שלם, כלומר המספר הבודד נמצא מימין. אחרת, המספר הבודד נמצא ב-mid או משמאלו.
שאלת מבחן במבוא למדעי המחשב - האוניברסיטה הפתוחה 2018 | prepd.