מבני נתונים ואלגוריתמים - מחברת קורס/אלגוריתמים/תכנון דינאמי - דג הסלמון: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
Atavory (שיחה | תרומות)
אין תקציר עריכה
Atavory (שיחה | תרומות)
שורה 148:
==הדפסת העצירות==
 
נניח שצריך להדפיס גם את העצירות. כלומר, לא מספיק רק להדפיס את הפתרון המהיר ביותר, אלא גם את פרטיו (היכן עוצר הדג במסלול המהיר ביותר). זה קל למדי - פשוט נוסיף עוד מערך {{קוד בשורה|S}}, ששומר בכל נקודה את העצירה הקודמת לאותה נקודה. נדאג לעדכן מערך זה במהלך האלגוריתם:
כעת צריך להדפיס את העצירות.
 
<source lang = "python">
# Calculates the minimum time for the fish to swim up to (including) some pool (k).
# Takes the up-to pool number (k).
Min-Time(k)
1 if M[k] != Nil
2 return M[k]
3 if k == 1
4 M[k] = Resting-Times[k]
5 S[k] = k
6 return Resting-Times[k]
7 min-time = ∞
8 for i in [1, ..., k - 1]
9 guess = Min-Time(i) + 2 * (1.5^(k - i) - 1) + Resting-Times[k]
10 if guess</source>
 
והנה הפונקציה {{קוד בשורה|Print-Stops}} שתדפיס את העצירות:
<source lang = "python">
# Prints the stops on the fastest route up to
# (and including) some pool number (i).
Print-Stops(i)
1 if i &gt;> 1
2 Print-Stops(S[i])
3 Print(i)</source>
 
לסיכום, כך נדפיס הכל:
<source lang = "python">
# Run the algorithm, get the shortest time.
1 m = Min-Time( Length(Resting-Times) )
 
2 Print(m)
# Print the shortest time.
2 Print(m)
# Print the stops.
3 Print-Stops( Length(Resting-Times) )</source>