חזרה על מושגי מפתח
שיעור 14 מתוך 15 בקורס תכנות דינמי 101 של Coddy.
בשיעור הזה נעבור על מושגי המפתח שנלמדו בקורס תכנות דינמי 101.
- תכנות דינמי: תכנות דינמי הוא טכניקה לפתרון בעיות אופטימיזציה באמצעות פירוק שלהן לתת־בעיות פשוטות יותר ופתרון של כל תת־בעיה פעם אחת בלבד.
- ממואיזציה: ממואיזציה היא טכניקה למניעת חישובים מיותרים באמצעות שמירת התוצאות של קריאות יקרות לפונקציות והחזרת התוצאה השמורה במטמון כאשר אותן קלטים מופיעים שוב.
- מילוי טבלה: מילוי טבלה הוא טכניקה לפתרון בעיות של תכנות דינמי באמצעות מילוי איטרטיבי של טבלה או מערך של פתרונות, עד לקבלת הפתרון הסופי.
- תת־מבנה אופטימלי: בעיה מציגה תת־מבנה אופטימלי אם הפתרון האופטימלי לבעיה מכיל בתוכו פתרונות אופטימליים לתת־הבעיות שלה.
- תת־בעיות חופפות: בעיה מציגה תת־בעיות חופפות אם ניתן לפרק אותה לתת־בעיות שחולקות תת־תת־בעיות.
- אופטימיזציית זיכרון: אופטימיזציית זיכרון היא טכניקה להפחתת דרישות הזיכרון של אלגוריתם תכנות דינמי באמצעות מעקב רק אחר המצב הנחוץ.
- מסכת סיביות: מסכת סיביות היא טכניקה לייצוג קבוצת איברים כמספר בינארי באמצעות פעולות על סיביות.
- גיזום: גיזום הוא טכניקה להפחתת מספר החישובים הנדרשים באלגוריתם תכנות דינמי באמצעות הימנעות מחישובים מיותרים.
אתגר
בינוניאתגר סיכום: מסלול בעלות מינימלית
נתונה לך רשת בגודל n x n המייצגת מפה של העיר. כל תא ברשת מייצג צומת רחובות, והערכים בתאים מייצגים את עלות המעבר בצומת. ברצונך לנסוע מהפינה השמאלית העליונה של הרשת לפינה הימנית התחתונה, ובכל צומת אפשר לנוע רק למטה או ימינה.
כתבי פונקציה min_cost_path(grid) שמקבלת את הרשת כקלט ומחזירה את העלות המינימלית של מעבר ברשת מהפינה השמאלית העליונה לפינה הימנית התחתונה.
לדוגמה:
grid = [
[1, 3, 1],
[1, 5, 1],
[4, 2, 1]
]
min_cost_path(grid) => 7הסבר: המסלול בעל העלות המינימלית הוא 1 -> 3 -> 1 -> 1 -> 1, והעלות הכוללת שלו היא 7.
נסו בעצמכם
def min_cost_path(grid):
# כתבו כאן את הקודכל השיעורים ביחידה תכנות דינמי 101
תרגלו בעצמכם: קומפיילר Python אונליין