שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2022 - תכנות דינמי

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

רמז: תכנות דינמי.


א. (13) הגדירו נוסחה רקורסיבית
עבור , , שתחזיר את עלות הנסיעה הזולה ביותר מ ל, כאשר מותר להשתמש בתחנות ביניים רק מתוך הקבוצה ; יש לכלול את תנאי העצירה בנוסחה.

ב. (6) הגדירו את המטריצה
שברצוננו לבנות במונחים של הנוסחה הרקורסיבית .

ג. (6) מהן סיבוכיות הזמן וסיבוכיות המקום הנדרשות עבור אלגוריתם התכנות הדינמי? נמקו. שימו לב כי אין צורך לשחזר את המסלולים.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2022סמסטר ב
תכנות דינמיגרפיםמסלולים קצריםנוסחת נסיגה
הגדירו את תת-הבעיה כעלות המסלול הזול ביותר המשתמש רק בתחנות ביניים מתוך קבוצה חלקית של צמתים בגודל k. לאחר מכן, חשבו כיצד הוספת צומת k+1 לקבוצה זו משפיעה על המסלול.
### סעיף א: נוסחה רקורסיבית

נגדיר את התת-בעיה באופן הבא:
היא עלות המסלול הזול ביותר מהעיר לעיר , כאשר מותר להשתמש בתחנות ביניים רק מתוך הקבוצה $\{a_1, a_2,
obreakspace

ldots, a_k\}$.


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


הצעד הרקורסיבי:
עבור
, נרצה לחשב את בהתבסס על ערכים עם אינדקס קטן יותר. המסלול הזול ביותר מ- ל- המשתמש בתחנות ביניים מתוך $\{a_1,
obreakspace

ldots, a_k\}$ יכול להיות משני סוגים:


1. **המסלול אינו עובר דרך העיר
.** במקרה זה, המסלול משתמש רק בתחנות ביניים מתוך הקבוצה $\{a_1,
obreakspace

ldots, a_{k-1}\}
E(i,j,k-1)$.
2. **המסלול כן עובר דרך העיר
.** במקרה זה, ניתן לפרק את המסלול לשניים: מסלול מ- ל-, ומסלול מ- ל-. כדי שהמסלול הכולל יהיה הזול ביותר, כל אחד מהקטעים חייב להיות הזול ביותר האפשרי. תחנות הביניים בכל אחד מהקטעים יכולות להיות רק מתוך הקבוצה $\{a_1,
obreakspace

ldots, a_{k-1}\}
a_kE(i,k,k-1) + E(k,j,k-1)$.

העלות המינימלית
היא המינימום מבין שני המקרים הללו.

הנוסחה הרקורסיבית המלאה:


### סעיף ב: הגדרת המטריצה D


המטריצה
מייצגת את עלות הנסיעה הזולה ביותר מ- ל- כאשר מותר להשתמש בכל עיר כתחנת ביניים. קבוצת כל הערים היא $\{a_1, a_2,
obreakspace

ldots, a_n\}$.


על פי הגדרת הנוסחה הרקורסיבית מסעיף א',
היא בדיוק עלות הנסיעה הזולה ביותר מ- ל- כאשר מותר להשתמש בתחנות ביניים מתוך הקבוצה $\{a_1,
obreakspace

ldots, a_n\}$.


לכן, ניתן להגדיר את המטריצה
באופן הבא:


### סעיף ג: ניתוח סיבוכיות


האלגוריתם המבוסס על תכנות דינמי יבנה טבלה תלת-ממדית (או מערך) כדי לאחסן את הפתרונות של כל תתי-הבעיות
ויחשב אותם באופן איטרטיבי (bottom-up), החל מ- ועד .

סיבוכיות זמן:
האלגוריתם ירוץ בשלוש לולאות מקוננות:

1. לולאה חיצונית על
מ-1 עד .
2. לולאה אמצעית על
מ-1 עד .
3. לולאה פנימית על
מ-1 עד .

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

סיבוכיות מקום:
במימוש נאיבי, נצטרך לשמור את כל ערכי
בטבלה תלת-ממדית בגודל , מה שדורש **סיבוכיות מקום של **.

*נימוק לאופטימיזציה:* ניתן לשים לב שהחישוב של שכבה
(כלומר, כל הערכים עבור קבוע) תלוי אך ורק בערכים מהשכבה הקודמת, . לכן, אין צורך לשמור את כל השכבות בזיכרון בו-זמנית. ניתן להסתפק בשתי מטריצות דו-ממדיות בגודל (אחת עבור שכבה ואחת עבור שכבה ), ולהעתיק ביניהן. זה מוריד את סיבוכיות המקום ל-. ניתן אפילו לבצע את העדכון במקום (in-place) עם מטריצה אחת בלבד בגודל , ולכן סיבוכיות המקום המיטבית היא ****.