For faster navigation, this Iframe is preloading the Wikiwand page for תכנון דינמי.

תכנון דינמי

במדעי המחשב, שיטת התכנון הדינמי לבניית אלגוריתם, שהוצגה לראשונה בשנת 1953 על ידי ריצ'רד בלמן, היא שיטה לפתרון בעיות בעלות תת-מבנה מיטבי (Optimal substructure) שאי אפשר לפתור אותן באופן יעיל בשיטת הפרד ומשול נאיבית. שיטת הפרד ומשול נאיבית פותרת בעיה על ידי חלוקתה לתת-בעיות, הנפתרות בתורן על ידי חלוקתן לתת-בעיות קטנות אף יותר, עד שמתקבלות בעיות קטנות מספיק שניתן לפתור אותן באופן ישיר.

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

האלטרנטיבה שמציעה שיטת התכנון הדינמי היא פתרון של כל תת-הבעיות בזו אחר זו, כאשר פתרון כל אחת מתת-הבעיות נשמר עבור שימוש עתידי. באופטימיזציה מתמטית תכנות דינמי מתממש על ידי הגדרת פונקציות ערך V התלויות במשתנה מצב y כאשר V ידועות עבור השלב ההתחלתי ו V בשלב הסופי נותנות את הפתרון. פונקציות V נבנות בצורה רקורסיבית כאשר בניית V של שלב n מתקבלת בצורה רקורסיבית מהשלבים הקודמים על ידי משוואת בלמן.

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

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

קווי פעולה למציאת אלגוריתם בשיטת התכנון הדינמי

[עריכת קוד מקור | עריכה]
  1. מציגים פתרון רקורסיבי לבעיה.
  2. מגלים כי זמן ריצת האלגוריתם הרקורסיבי (הפועל "מלמעלה למטה") הוא מעריכי.
  3. מגלים כי מספר תת-הבעיות הקיימות הוא פולינומי, והסיבה לסיבוכיות המעריכית היא קריאות חוזרות לאלגוריתם עבור אותה תת-בעיה שכבר נפתרה.
  4. פותרים את הבעיה על ידי פתרון כל תת-הבעיות – ממקרי הקצה שפתרונותיהם ידועים מראש ("כלפי מעלה") – עד שמגיעים לבעיה המקורית.

חישוב איבר כללי בסדרת פיבונאצ'י

[עריכת קוד מקור | עריכה]

סדרת פיבונאצ'י היא סדרה המוגדרת באמצעות נוסחת הנסיגה הבאה:

כאשר שני האיברים הראשונים בסדרה נתונים:

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

לדוגמה, נחשב בצורה זו את האיבר החמישי בסדרה בצורה זו:

קל לראות בדוגמה זו שהערך מחושב שוב ושוב פעמים רבות, ושהחישוב ייעשה בלתי יעיל להפליא עבור ערכים גדולים של .

אלגוריתם תכנון דינמי לפתרון הבעיה יעבוד בכיוון ההפוך – הוא ינוע מערכי הקצה לערך הרצוי על ידי חישוב סדרתי של כל מספרי פיבונאצ'י עד אליו. למשל עבור הדוגמה הקודמת שלנו, כאשר האלגוריתם יפעל כך:

  1. חישוב באמצעות הנתונים.
  2. חישוב באמצעות (שחושב בצעד הקודם) ו- (הנתון).
  3. חישוב באמצעות (שחושבו בצעדים הקודמים).

ניתן לשים לב שבעוד שהאלגוריתם הרקורסיבי שתואר קודם לכן ביצע 9 קריאות רקורסיביות, האלגוריתם החדש ביצע 3 צעדים בלבד, מאחר שחישב את כל אחד מהערכים פעם אחת בלבד.

בדרך זו ניתן לחשב את פונקציית פיבונאצ'י של כל מספר n בסיבוכיות ליניארית וזאת באמצעות "זכירה" של 2 מספרים בלבד.

קישורים חיצוניים

[עריכת קוד מקור | עריכה]
{{bottomLinkPreText}} {{bottomLinkText}}
תכנון דינמי
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?