תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (6..(CLR ראשית נראה דוגמא:. A, A, A, A נסמן את גודל המטריצות בסדרה ע"י סדרת גדלים, כאשר 5 5 p p A דוגמא: תהינה ארבע מטריצות:,5,} {,, = P, כלומר היא בגודל.p p בדרך הנאיבית היא בסיבוכיות של מכפלת הגדלים, כלומר p A p xp, A p xp הכפלה של שתי מטריצות למשל: היא בסיבוכיות של = **, והתוצאה היא מטריצה בגודל.. p p +, p p p והמטריצה המתקבלת היא בגודל + (( A A ) ( A A )) = ( A (( A A ) A )) A A + A A במקרה הכללי: היא בסיבוכיות הכפלת מטריצות היא אסוציאטיבית:, כלומר סדר הכפלים אינו משנה את התוצאה. לעומת זאת סדר הכפלים משנה את מספר הכפלים לחישוב: אם נכפיל את המטריצות כך: ) A ( A A ) ( A ה"עלות" תהיה לזוג המטריצות השמאליות, ו - = *5* למכפלה. A A = **5, ועלות A A ( ) הכפלת שתי התוצאות = **. סך הכול 5 חישובים. אם נכפיל את המטריצות כך: ) A, A (( A A ) רק עלות המכפלה תהיה ( ) זו גבוהה בהרבה מהכפלת הסדרה כולה לפי סדר ההכפלות הקודם. { A, A..., A n הניתנות להכפלה, כלומר, לכל < n מימד העמודות של A שווה למימד } נגדיר פורמאלית את הבעיה: מופע: סדרת מטריצות השורות של + A. שנסמנו ב- U. { A, A..., A n פתרון חוקי: סדר הכפלה של המטריצות } U. להיות מספר הפעולות הנדרש להכפלת המטריצות על פי הסדר cost( עלות הפתרון: עבור פתרון U נגדיר את ) U יש למצוא: סדר הכפלה של המטריצות עם עלות מינימום. נשים לב שפתרון לבעיה הינו הצבת סוגריים על סדרת המטריצות, שכן הסוגריים מגדירים סדר הכפלה. הפתרון הנאיבי הוא לנסות את כל האפשרויות להצבת סוגריים על הסדרה. בכמה אופנים ניתן להכניס סוגריים מאוזנים בצורה מלאה במחרוזת באורך n? התשובה היא מספר ק ט ל ן )Catalan( של n שהוא אקספוננציאלי ב- n. ליתר דיוק, ).5 )Ώ n n/ הוא חסם תחתון אקספוננציאלי למספר הזה. נראה כי קיים פתרון יעיל בהרבה. Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above.
פתרון על ידי תכנון דינמי הגדרת תתי הבעיות ו OPT נסמן ב-[ Sol[, את קבוצת כל הפתרונות החוקיים עבור תת הבעיה של הכפלת סדרת המטריצות } A},, A עבור n. כלומר, Sol[, ] = {U A,, A פתרון חוקי להכפלת U} נסמן ב-[ את מספר פעולות הכפל המינימאלי הדרוש להכפלת סדרת המטריצות. כלומר, { A,..., A } OPT[, ] = mn {cost(u)} U Sol[,], כלומר מספר פעולות הכפל המינימאלי בהכפלת כל סדרת המטריצות..OPT[, ]= { A,..., A }=}A OPT[, n], OPT[, אנו מחפשים את למשל, אם } A טענה: )מבנה של פתרון אופטימאלי( אז, OPT[, ] = mn { OPT[, k] + OPT[ k +, ] + p k p k p }, =, הוכחת נכונות הנוסחא אינטואיציה: הנוסחה מחלקת את קבוצת הפתרונות לפי הכפל האחרון בסדרה, כלומר לפי הסוגריים החיצוניים ביותר. A A... A ) ( A A... במכפלה ) A A ( ) ( + k k + k + עבור = ישנה סדרה של מטריצה יחידה } A}, ולכן הפתרון היחיד הוא המטריצה צורך לבצע כפל מטריצות(. ועלות החישוב היא )אין כלל נתבונן עכשיו במקרה של. < ההוכחה נסמכת על הטענה הבאה אשר נובעת בצורה פשוטה מההגדרות )הוכחת הטענה מושארת לקורא החרוץ(. טענה עבור, k < הפתרונות ב-[ Sol[, כך שהכפל האחרון הוא בין תוצאת מכפלת הסדרה } k {A,, A לתוצאת מכפלת הסדרה } {A k+,, A הם בדיוק כל הפתרונות מהצורה ) (U ) (U כאשר k] U Sol[, וכן.U Sol[k +, ] נשים לב כי כל פתרון ב-[ Sol[, מקיים את הטענה לעיל לאיזה, k < לפי מיקום הכפל האחרון בו. לכן נסיק כי מהטענה נובע: OPT[, ] = mn {cost(u)} U Sol[,] {{הכפל האחרון ב- U הוא בין הסדרות } k {A, A ו-{ = mn { mn { cost(u) {A k+,, A k< U Sol[,] = mn { mn {cost((u ) (U ))}} k< U Sol[,k], U Sol[k+,] = mn { mn {cost(u ) + cost(u ) + p p k p }} k< U Sol[,k], U Sol[k+,] = mn { mn {cost(u )} + mn {cost(u )} + p p k p }} k< U Sol[,k] U Sol[k+,] = mn {OPT[, k] + OPT[k +, ] + p p k p } k< הערה: הוכחנו רק את הנוסחא ולא את "האלגוריתם". שימו לב שעד כה לא תיארנו אלגוריתם. Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above.
Recursve-Matrx-Chan(,) f then return else = m for k return m to do q Recursve-Matrx-Chan(,k) + אלגוריתמים מבוססי תכנון דינאמי לבעיית המטריצות Recursve-Matrx-Chan(k+, )+ p p p f q m then m q.opt[, ] k נתחיל מאלגוריתם רקורסיבי לחישוב A,..., A n המחיר המינימאלי של הכפלת המטריצות יתקבל ע"י ההפעלה.Recursve-Matrx-Chan(,n) הבעיה באלגוריתם הנ"ל היא שנחשב מספר גדול של חישובים חופפים נתבונן לדוגמא בעץ הקריאות הרקורסיבי שראינו קודם: ב- n הוא לפחות אקספוננציאלי }פתרון נוסחת המבנה: מקרה בסיס T() OPT[, זמן הריצה הנדרש לחישוב [ }T ( n) + n k = ( T ( k) + T ( n k) + ) ועבור <n: פתרון רקורסיבי כזה הוא לא הכי טוב שניתן להשיג. זה הזמן לשים לב לכך שכמה זוגות ערכים מופיעים בעץ פעמים רבות. כלומר, מספר תתי הבעיות הקטנות שהאלגוריתם שלנו פוגש במהלך הפתרון הוא קטן יחסית: n. + n = ( n ) הוא n המקיים, מספר האפשרויות לבחור זוג על מנת להימנע מחישוב חוזר של תתי בעיות, נשמור במבנה נתונים כל פתרון שנחשב לתת בעיה. במקרה שלנו, נבנה.[, [ אזי ערך הפתרון מאוכסן בטבלה במקום ה- OPT[, טבלה בגודל nn כך שאם חישבנו כבר את [ Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above.
שיפור זמן ריצה על ידי שיטת הפתקאות (memozaton) בזמן ריצת האלגוריתם הרקורסיבי, לפני כל קריאה רקורסיבית נבדוק האם תת הבעיה הזו כבר חושבה )על פי הערך בטבלה בעלת ערך שונה מ- (, אם הערך חושב נשתמש בו ונחסוך קריאה רקורסיבית מיותרת )במחיר של חיפוש במבנה הנתונים(, אם הערך לא חושב, נחשב אותו ונאכסן את התוצאה במבנה הנתונים לשימוש עתידי. שיטה זו נקראת שיטת התזכור -.memozaton Memozed-Matrx-Chan(n) for do for to n do m[, ] return Lookup-Chan(,n) to n Lookup-Chan(,) f m[, ] then return else f else = m[, ] return m[, ] then m[, ] for k to do q Lookup-Chan(,k) + Lookup-Chan(k+, )+ p p p f q m[, ] then m[, ] q k ניתן לראות כי זמן החישוב של הפרוצדורה הוא ).O(n Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above.
אלגוריתם איטראטיבי במקום לחשב את הפתרון בצורה רקורסיבית, נחשב את הפתרון "מלמטה למעלה" בצורה איטראטיבית. החישוב לתת בעיה באורך משתמש רק בתוצאות החישובים לתתי הבעיות באורך וכן הלאה. ז"א הנתונים הנדרשים לחישוב תת בעיה באורך l הם פתרונות עבור תתי בעיות באורך קטן מ- l אשר כבר חושבו ונמצאים בטבלה. זו בעצם בניית הטבלה מהאלכסון הראשי ומעלה. השגרה משתמשת בטבלת עזר n] m[ n, לאחסון העלויות ובטבלת עזר n] s[ n, שבה נרשמים האינדקסים k שעבורם התקבלה עלות אופטימאלית בעת חישוב [,m[, כלומר זהו הערך שמפצלים בו את המכפלה A.. כדי לקבל הצבת סוגריים אופטימאלית. A Matrx-Chan-Order(n) for to n do m[, ] for l to n do for to n l do + l m[, ] for k to do q m[, k] + m[k +, ] + p p k p f q < m[, ] then m[, ] q s[, ] k בקטע קוד הזה אנחנו מחפשים ומכניסים ל -[ s[, את הערך שמפצלים בו את המכפלה A,, A כדי לקבל הצבת סוגריים אופטימאלית ע"י בדיקת הערכים k =,, ומציאת המינימום. Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above. 5
דוגמת ריצה : A, A, A, A 5 5 לדוגמא, במקרה של המטריצות שלנו שלב = : l ++p*p*p = * * = K = + + p*p*p = * * 5 = K = + +p*p*p = *5* = K= שלב = : l k= ++p*p*p = +**5 = 5 k= K= ++p*p*p = +** = 5 k= K= שלב = : l k= 5 k= K= +5+p*p*p= 5+** = 5 k= 5 k= K= ערך הפתרון האופטימאלי נמצא ב [,]: k= 5 k= K= 5 k= 5 k= K= Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above. 6
. A, A, A 5, A5 מכיוון שהגדרנו את m[,] עבור בלבד, האיור הבא מדגים תהליך זה על המטריצות אנו משתמשים רק במשולש הנמצא מעל האלכסון הראשי של הטבלה. באיור הבא, הטבלאות מסובבות כך שהאלכסון הראשי הוא בכיוון האופקי. העלות המינימאלית m[,] של חישוב תת המכפלה תימצא בתא שבנקודת החיתוך בין הקו היוצא מ - A.. A A לכיוון צפון-מזרח, והקו היוצא מ- A לכיוון צפון-מערב. כל שורה אופקית בטבלה מכילה תאים עבור סדרות מטריצות באותו האורך. השגרה Matrx-Chan-Order(n) מחשבת את השורות מלמטה למעלה ובכל שורה משמאל לימין. ערך התא m[,] מחושב תוך שימוש במכפלות p p p עבור k =, +,, ובכל ערכי התאים הנמצאים מדרום-מערב ומדרום-מזרח ל.m[,]- k 5 5 5 A A A A m s הוכחת נכונות של האלגוריתם האיטראטיבי יש לוודא כי בעת חישוב תא m[,] כל התאים בהם תלוי החישוב של תא זה חושבו כבר ואלו מכילים ערכי פתרונות אופטימאליים עבור תתי-הבעיות אותן הם מייצגים. יש להוכיח את שתי הטענות הבאות: טענה )ניתן להראות באינדוקציה(: בעת חישוב התא ה- m[,] כל התאים בשורה ה- מהעמודה ה- ועד העמודה ה-( - ) וכל התאים בעמודה ה- מהשורה ה-( + ) ועד השורה ה- כבר חושבו על מבנה הנתונים )במקרה זה מטריצה(. טענה )הטענה שמנסחת את הנוסחה הרקורסיבית(: התא m[,] אכן שווה ל- OPT(,) לאחר החישוב. כלומר יש להראות )באינדוקציה( שערך התא שווה לערך שמחושב על ידי הנוסחא שהוגדרה קודם,, = OPT[, ] = mn { OPT[, k] + OPT[ k +, ] + p pk p }, k ניתוח זמן מילוי הטבלה: ישנם ) ( On תאים בטבלה. n תאי האלכסון מאותחלים בזמן קבוע לכל תא. On ( ) זוגות של תאים שכבר חושבו, ובמקרה הכללי כל תא [ [, מצריך בדיקה של סה"כ זמן מילוי הטבלה: פעולות לכל תא..O( n) וכמה מקום צריך? Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above. 7
שחזור: כיצד למצוא סדרת הכפלות אופטימאלית ולא רק עלות בזמן מילוי הטבלה, שמרנו ב -s עבור כל תא גם את ה- k שממנו הגענו לתוכן התא. כלומר, את הערך k שמגדיר כיצד לחלק את בעיית ההכפלה בצורה אופטימאלית. בעזרת ערכים אלו נוכל ע"י הליכה "אחורה" { A,..., A } מהתא [n,] ו"איסוף" ה- k -ים לשחזר את הצבת הסוגריים. Recursve Mul Restore (, ) f ( = ) return A k s[, ] return (Recursve Mul Restore (, k)) (Recursve Mul Restore (k +, )) שחזור סדר הכפלה עם עלות מינימלית עבור } n {A,, A יתקבל בהפעלת n). Recursve Mul Restore(, דוגמת ריצה במקרה של המטריצות שלנו נסתכל על התא ז"א : A, A, A, A 5 5 [,]. כיוון ש- = k ההכפלה האחרונה בסדרה היא בין תת הסדרה { A } ותת הסדרה } A,{ A, A, ) A. A ( A A כעת נביט בתא ] [, k = } A.{ A, A, בתא זה, משמע סדר ההכפלות הוא על מנת למצוא את ההצבה האופטימאלית של הסוגריים בתוך )) A, A ( A ( A ובזאת סיימנו את השחזור. הוכחת נכונות של אלגוריתם השחזור נכונות האלגוריתם נובעת מנוסחת המבנה ומהטענה עליה מבוססת נכונות נוסחת המבנה. תזכורת: עבור, k < הפתרונות ב-[ Sol[, כך שהכפל האחרון הוא בין תוצאת מכפלת הסדרה } k {A,, A לתוצאת מכפלת הסדרה } {A k+,, A הם בדיוק כל הפתרונות מהצורה ) (U ) (U כאשר k] U Sol[, וכן.U Sol[k +, ] בהתבסס על נכונות האלגוריתם האיטראטיבי, תא [ s[, מכיל את האינדקס k עבורו מתקבל המינימום של נוסחת המבנה. כלומר, את הערך k שמגדיר כיצד לחלק את בעיית ההכפלה } A {,...,A בצורה אופטימאלית. לפי הטענה הפתרון הוא מהצורה ) (U ) (U כאשר k] U Sol[, וכן ].U Sol[k +, ניתן להוכיח באינדוקציה כי האלגוריתם הרקורסיבי מחזיר U, U כנ"ל מינימליים, ומכאן נובעת נכונות האלגוריתם אשר אכן מחזיר ).(U ) (U ניתוח זמן האלגוריתם מבצע מס' קבוע של פעולות בתוך כל קריאה רקורסיבית. גודל עץ הרקורסיה הוא,O(n) וניתן להוכיח זאת באינדוקציה O()( T(n) = T(k) + T(n k) + לאיזה k < n כאשר O().(T() = לסיכום: בהינתן בעיה שאתם שוקלים לפתור אותה )חושדים או יודעים שפתרונה הוא( ע"י תכנון דינאמי, אלה השלבים שמרכיבים את הפתרון: הגדרת מספר פולינומי של תתי בעיות באופן מילולי והגדרת.OPT ניסוח נוסחת המבנה, כולל מקרי בסיס ומיקום הפתרון לבעיה המקורית. הוכחת נכונות של נוסחת המבנה. מימוש האלגוריתם איטראטיבי/רקורסיבי למציאת ערך הפתרון האופטימאלי )בד"כ נבקש איטרטיבי(. הוכחת נכונות של האלגוריתם: האלגוריתם פועל בהתאם לנוסחת המבנה. o בכל שלב בריצת האלגוריתם, כל ערך לו האלגוריתם זקוק, חושב באחד מהשלבים הקודמים. o תכנון אלגוריתם לשחזור פתרון אופטימלי מתוך ערכי OPT שחושבו, והוכחת הנכונות שלו. ניתוח זמן ריצה. Course materal s updated perodcally, please be sure to read the latest updates on the course webste. Practcal sessons and classes may nclude addtonal materal not lsted above. 8