שאלת מבחן במבוא למדעי המחשב - האוניברסיטה הפתוחה 2017 - מערכים
כתבו שיטה יעילה המקבלת כפרמטר מערך חד-ממדי arr המלא במספרים שלמים חיוביים הממוינים בסדר לא יורד. השיטה תחזיר מהו המספר הקטן ביותר שאי אפשר להיות סכום של קבוצת מספרים מהמערך.
חתימת השיטה היא:
דוגמאות:
- עבור המערך arr הבא:
| 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | 2 | 6 | 10 | 11 | 15 |
מהו המספר הקטן ביותר שלא יכול להיות סכום של חלק מאיברי המערך?
1 יכול להיות כי הוא הסכום של arr[0]. 2 יכול להיות כי הוא הסכום של arr[1]. 3 יכול להיות כי הוא הסכום של arr[0] ו-arr[1]. 4 לא יכול להיות סכום של חלק מאיברי המערך (ולא דרושה רצופים). לכן השיטה תחזיר 4.
- עבור המערך arr הבא: - השיטה תחזיר 5
- עבור המערך arr הבא: - השיטה תחזיר 10
- עבור המערך arr הבא: - השיטה תחזיר 2
- עבור המערך arr הבא: - השיטה תחזיר 8
אפשר להניח שהמערך מלא במספרים שלמים חיוביים והוא ממוין בסדר לא יורד.
השיטה שתכתבו צריכה להיות יעילה ככל הניתן, גם מבחינת סיבוכיות הזמן וגם מבחינת סיבוכיות המקום. תשובה שאינה יעילה תקבל מעט נקודות בלבד.
כתבו מה סיבוכיות הזמן וסיבוכיות המקום של השיטה שכתבתם.
חתימת השיטה היא:
דוגמאות:
- עבור המערך arr הבא:
| 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 1 | 2 | 6 | 10 | 11 | 15 |
מהו המספר הקטן ביותר שלא יכול להיות סכום של חלק מאיברי המערך?
1 יכול להיות כי הוא הסכום של arr[0]. 2 יכול להיות כי הוא הסכום של arr[1]. 3 יכול להיות כי הוא הסכום של arr[0] ו-arr[1]. 4 לא יכול להיות סכום של חלק מאיברי המערך (ולא דרושה רצופים). לכן השיטה תחזיר 4.
- עבור המערך arr הבא: - השיטה תחזיר 5
- עבור המערך arr הבא: - השיטה תחזיר 10
- עבור המערך arr הבא: - השיטה תחזיר 2
- עבור המערך arr הבא: - השיטה תחזיר 8
אפשר להניח שהמערך מלא במספרים שלמים חיוביים והוא ממוין בסדר לא יורד.
השיטה שתכתבו צריכה להיות יעילה ככל הניתן, גם מבחינת סיבוכיות הזמן וגם מבחינת סיבוכיות המקום. תשובה שאינה יעילה תקבל מעט נקודות בלבד.
כתבו מה סיבוכיות הזמן וסיבוכיות המקום של השיטה שכתבתם.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחה902017סמסטר א
★★★★★
מערכיםיעילותסיבוכיות זמןסיבוכיות מקוםלולאות
עברו על המערך משמאל לימין ושמרו משתנה res שמייצג את המספר הקטן ביותר שלא ניתן ליצור. אם arr[i] <= res, אפשר להרחיב את הטווח.
הרעיון: נשמור משתנה
הסבר: מתחילים עם
סיבוכיות זמן: - מעבר יחיד על המערך.
סיבוכיות מקום: - משתנה עזר יחיד.
res שמייצג את המספר הקטן ביותר שלא ניתן ליצור כסכום. נתחיל עם res = 1. עוברים על המערך: אם arr[i] <= res, אז ניתן ליצור את כל המספרים עד res + arr[i] - 1, ולכן נעדכן res = res + arr[i]. אם arr[i] > res, אז res הוא התשובה.הסבר: מתחילים עם
res = 1. בכל שלב, אם arr[i] <= res, אז בעזרת arr[i] ניתן להרחיב את טווח הסכומים האפשריים מ- ל-. אם arr[i] > res, יש "חור" ו-res לא ניתן לייצוג.סיבוכיות זמן: - מעבר יחיד על המערך.
סיבוכיות מקום: - משתנה עזר יחיד.