שאלת מבחן באלגוריתמים - האוניברסיטה הפתוחה 2022 - תכנות דינמי
שאלה 1 – תשלום במטבעות
במטבעה רוקדת בצלעות אר רכך לישלם, יתנוני ממלוקחים שלמים. ויקימים, חדוקים השנויות שנכרוכים מטבעות שווה מחיר היא מחיר, יתנוני מטבעה סדירה שלפט .
חדוקים שנויות לשלם סמים עבור, לממש קדום משלם סדור מטבעה בעד , או לחלופין, לשלם קדום רכך אחרוני מטבעה בעד , ושלוני דרכים שנויות לשלם סדור מטבעה מצרך ישרר כ–.
(ג'–8 נק') הוכיחו כי לכל שלם יתנוני אפשר למחשב את .
במטבעה רוקדת בצלעות אר רכך לישלם, יתנוני ממלוקחים שלמים. ויקימים, חדוקים השנויות שנכרוכים מטבעות שווה מחיר היא מחיר, יתנוני מטבעה סדירה שלפט .
חדוקים שנויות לשלם סמים עבור, לממש קדום משלם סדור מטבעה בעד , או לחלופין, לשלם קדום רכך אחרוני מטבעה בעד , ושלוני דרכים שנויות לשלם סדור מטבעה מצרך ישרר כ–.
(ג'–8 נק') הוכיחו כי לכל שלם יתנוני אפשר למחשב את .
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 892022סמסטר ב
★★★★★
תכנות דינמינוסחת נסיגההוכחה
הגדירו את כמספר הדרכים המסודרות לשלם סכום . נסו למצוא נוסחת נסיגה עבור על ידי בחינת המטבע האחרון שבו ניתן להשתמש.
כדי להוכיח שניתן לחשב את לכל , נציג אלגוריתם המחשב אותו. ראשית, נגדיר את הבעיה באופן מדויק ונפתח נוסחת נסיגה.
יהי מספר הסדרות השונות של מטבעות מהקבוצה שסכומן הוא בדיוק . מכיוון שהשאלה מתייחסת ל"סדר" התשלום, אנו סופרים את כל הסדרות האפשריות.
כל סדרת מטבעות שסכומה (עבור ) חייבת להסתיים באחד המטבעות מהקבוצה . נבחן את כל האפשרויות למטבע האחרון בסדרה:
1. המטבע האחרון הוא 1: אם המטבע האחרון הוא 1, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא, על פי ההגדרה, .
2. המטבע האחרון הוא 3: אם המטבע האחרון הוא 3, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא .
3. המטבע האחרון הוא 5: אם המטבע האחרון הוא 5, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא .
מכיוון ששלוש האפשרויות הללו זרות (סדרה אינה יכולה להסתיים בו-זמנית בערכים שונים), לפי עקרון הסכום, נוסחת הנסיגה עבור היא:כדי שהנוסחה תהיה מוגדרת היטב, עלינו להגדיר תנאי בסיס:
- : ישנה דרך אחת בלבד להרכיב את הסכום 0 - באמצעות הסדרה הריקה (ללא מטבעות כלל).
- לכל , נגדיר , כיוון שלא ניתן ליצור סכום שלילי ממטבעות חיוביים.
כעת, נוכל להציג אלגוריתם לחישוב בשיטת תכנות דינמי, אשר בונה את הפתרון "מלמטה למעלה" על בסיס נוסחת הנסיגה.
**אלגוריתם לחישוב :**
1. ניצור מערך
2. נאתחל את תנאי הבסיס:
3. נרוץ בלולאה עבור
א. נחשב את
4. התוצאה הסופית היא הערך המאוחסן ב-
אלגוריתם זה מבצע לולאה באורך , ובכל איטרציה מבצע מספר קבוע של פעולות חשבון וגישה למערך. לכן, סיבוכיות הזמן שלו היא וסיבוכיות המקום היא .
מכיוון שהצגנו אלגוריתם דטרמיניסטי, אשר עוצר תמיד לאחר מספר סופי של צעדים ומחשב את לכל , הוכחנו כי ניתן לחישוב.
יהי מספר הסדרות השונות של מטבעות מהקבוצה שסכומן הוא בדיוק . מכיוון שהשאלה מתייחסת ל"סדר" התשלום, אנו סופרים את כל הסדרות האפשריות.
כל סדרת מטבעות שסכומה (עבור ) חייבת להסתיים באחד המטבעות מהקבוצה . נבחן את כל האפשרויות למטבע האחרון בסדרה:
1. המטבע האחרון הוא 1: אם המטבע האחרון הוא 1, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא, על פי ההגדרה, .
2. המטבע האחרון הוא 3: אם המטבע האחרון הוא 3, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא .
3. המטבע האחרון הוא 5: אם המטבע האחרון הוא 5, יתר המטבעות בסדרה חייבים להצטבר לסכום של . מספר הדרכים לעשות זאת הוא .
מכיוון ששלוש האפשרויות הללו זרות (סדרה אינה יכולה להסתיים בו-זמנית בערכים שונים), לפי עקרון הסכום, נוסחת הנסיגה עבור היא:כדי שהנוסחה תהיה מוגדרת היטב, עלינו להגדיר תנאי בסיס:
- : ישנה דרך אחת בלבד להרכיב את הסכום 0 - באמצעות הסדרה הריקה (ללא מטבעות כלל).
- לכל , נגדיר , כיוון שלא ניתן ליצור סכום שלילי ממטבעות חיוביים.
כעת, נוכל להציג אלגוריתם לחישוב בשיטת תכנות דינמי, אשר בונה את הפתרון "מלמטה למעלה" על בסיס נוסחת הנסיגה.
**אלגוריתם לחישוב :**
1. ניצור מערך
DP בגודל לאחסון ערכי הפונקציה .2. נאתחל את תנאי הבסיס:
DP[0] = 1.3. נרוץ בלולאה עבור
i מ-1 עד :א. נחשב את
DP[i] באמצעות הערכים הקודמים שכבר חושבו:val1 = (i >= 1) ? DP[i-1] : 0val3 = (i >= 3) ? DP[i-3] : 0val5 = (i >= 5) ? DP[i-5] : 0DP[i] = val1 + val3 + val54. התוצאה הסופית היא הערך המאוחסן ב-
DP[n].אלגוריתם זה מבצע לולאה באורך , ובכל איטרציה מבצע מספר קבוע של פעולות חשבון וגישה למערך. לכן, סיבוכיות הזמן שלו היא וסיבוכיות המקום היא .
מכיוון שהצגנו אלגוריתם דטרמיניסטי, אשר עוצר תמיד לאחר מספר סופי של צעדים ומחשב את לכל , הוכחנו כי ניתן לחישוב.