תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (6..(CLR ראשית נראה דוגמא:. A, A, A, A נסמן את גודל המטריצות בסדרה ע"י סדרת גדלים כאשר, p 5 5 p היא בגודל A דוגמא: תהינה ארבע מטריצות: {,,,5,}, P כלומר A p xp בדרך הנאיבית היא בסיבוכיות של מכפלת הגדלים, כלומר, A p xp הכפלה של שתי מטריצות.p p p למשל: A A היא בסיבוכיות של **, והתוצאה היא מטריצה בגודל.. p p, כלומר סדר, p p p והמטריצה המתקבלת היא בגודל ( A A ) ( A A ) A (( A A ) A ) A במקרה הכללי: A היא בסיבוכיות הכפלת מטריצות היא אסוציאטיבית: הכפלים אינו משנה את התוצאה. לעומת זאת סדר הכפלים משנה את מספר הכפלים לחישוב: אם נכפיל את המטריצות כך: ) A ( A A ) ( A ה"עלות" תהיה לזוג המטריצות השמאליות, ו- 5 ל A תהיה **. סך הכו A, רק עלות המכפלה. A A הכפלת שתי התוצאות A (( A A ) A ) ועלות זו גבוהה בהרבה מהכפלת הסדרה כולה לפי סדר ההכפלות הקודם. *5* למכפלה חישובים. אם נכפיל את המטריצות כך:, **5 נגדיר פורמאלית את הבעיה: { A, A..., A n הניתנות להכפלה, כלומר, לכל n < מימד העמודות מופע: סדרת מטריצות } של A שווה למימד השורות של + A. U ב }שנסמנו A, A..., A n פתרון אפשרי: סדר הכפלה של המטריצות } )t cos להיות מספר הפעולות הנדרש להכפלת עלות הפתרון: עבור פתרון U נגדיר את (U יש למצוא: סדר הכפלה של המטריצות עם עלות מינימום. נשים לב שפתרון לבעיה הינו הצבת סוגריים על סדרת המטריצות, שכן הסוגריים מגדירים סדר הכפלה. הפתרון הנאיבי הוא לנסות את כל האפשרויות להצבת סוגריים על הסדרה. בכמה אופנים ניתן להכניס סוגריים מאוזנים בצורה מלאה במחרוזת באורך n? התשובה היא מספר ק ט ל ן )Catalan( של n שהוא אקספוננציאלי ב-. n ליתר דיוק, ).5 )Ώ n n/ הוא חסם תחתון אקספוננציאלי למספר הזה. נראה כי קיים פתרון יעיל בהרבה.
ב) א) תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי פתרון על ידי תכנון דינמי הגדרת תתי הבעיות ו OPT }.,...,A {A את מספר פעולות הכפל המינימאלי הדרוש להכפלת סדרת המטריצות, נסמן ב- [ אנו מחפשים את [n,, כלומר מספר פעולות הכפל המינימאלי בהכפלת כל סדרת המטריצות.., למשל, אם } { A,..., A}=}A, A אז ]= טענה: )מבנה של פתרון אופטימאלי(,, ] mn{, ], ] p p p },, הוכחה: א. ניתוח מקרים נחלק את הפתרונות האפשריים לקבוצות. נגדיר תת-קבוצות של פתרונות,, S, S, כאשר היא אוסף של כל הפתרונות בהם הכפל האחרון הוא בין אפשריים, S S תוצאת מכפלת הסדרה {A {,...,A לתוצאת מכפלת הסדרה {A }, A,..., ז"א כל הפתרונות. ( A A... A ) ( A A... A) ב. מהצורה: תת-הקבוצות מסעיף )א( מכסות את קבוצת כל הפתרונות האפשריים - ניקח פתרון כלשהו לבעיה U,שהוא סדר להכפלת סדרת מטריצות } A }. A, A,... נתבונן בכפל האחרון בסדר. נניח כי. U S הכפל האחרון הוא בין המכפלות של הסדרות{ A {,...,A ו- {A }, A,..., אזי ג. מסקנה לצורת נוסחת המבנה )t cos להיות מספר הפעולות הנדרש להכפלת U) הגדרנו את U S תזכורת: לכל פתרון המטריצות } A { A, A..., לפי הסידור של הפתרון U עבור,., S כלומר, S O ( S להיות המחיר המינימאלי של הפתרונות בקבוצה נגדיר את ). O ( S ) mn{cos t( U)} U S מסקנה: מ- ) ו- ), ] mn O ( S ), ( ),..., O S O ( S )
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי ד. ניתוח האופטימום של כל קבוצה.. O ( S ), ], ] p p p נוכיח כי לכל < מתקיים P ו- הסידורים של המטריצות {A {,...,A ו- {A { A,..., בהתאמה כך ש: P של סדרת המטריצות והמטריצות A} { A,..., P כיוון : נסתכל כל צד ימין, יהיו t(. cos אזי הסידור P ), ] ו- cos t( P ), ] } A { A, A..., כך שהמטריצות A} { A,..., מוכפלות לפי הסידור P ( A A... A ) ( A A... A ), P והכפל האחרון מוכפלות לפי הסידור הוא t(. cos ולפי הגדרת P ), ], ] p. O ( S p p ) cos t( P ) S פתרון ב- ועלותו היא: O ( S בהכרח מתקיים כיוון : P כך ש- ) ( cos,o ( S ) כלומר קודם מכפילים מטריצות t P S נסתכל על צד שמאל, יהי {A },,...,A אח"כ מכפילים מטריצות {A { A,..., ואח"כ מכפילים את התוצאות.. ב- P P ו- הסידורים של המטריצות A} { A,..., ו- A} { A,..., )בהתאמה( [ p p P ) P יהיו הוא מחיר t( cos ולכן P ) cos t( P ) p. O ( S ) cos t( P ) cos t( P ) cos t( P ) p p p, OPT ולכן ] cos t( P ) וגם OPT, ] cos t( P ) מתקיים כי:, לפי הגדרת [ [. O ( S ) OPT [, ] OPT [, ] p p p הערה: הוכחנו רק את הנוסחא ולא את "האלגוריתם". שימו לב שעד כה לא תיארנו אלגוריתם. אלגוריתמים מבוססי תכנון דינאמי לבעיית המטריצות., נתחיל מאלגוריתם רקורסיבי לחישוב [ Recursve-Matrx-Chan(,) f then return else m for to do q Recursve-Matrx-Chan(,) + Recursve-Matrx-Chan(+, )+ p p p f q m then m q return m A,..., A n המחיר המינימאלי של הכפלת המטריצות.Recursve-Matrx-Chan(,n) יתקבל ע"י ההפעלה
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי הבעיה באלגוריתם הנ"ל היא שנחשב מספר גדול של חישובים חופפים הרקורסיבי שראינו קודם: נתבונן לדוגמא בעץ הקריאות, הוא לפחות אקספוננציאלי ב- n }פתרון נוסחת המבנה: מקרה בסיס זמן הריצה הנדרש לחישוב [ }T( n) n ( T( ) T( n ) ) ועבור :n> T() פתרון רקורסיבי כזה הוא לא הכי טוב שניתן להשיג. זה הזמן לשים לב לכך שכמה זוגות ערכים מופיעים בעץ פעמים רבות. כלומר,מספר תת הבעיות הקטנות שהאלגוריתם שלנו פוגש במהלך הפתרון הוא קטן יחסית: n. n ( n ) הוא n המקיים, מספר האפשרויות לבחור זוג על מנת להימנע מחישוב חוזר של תת בעיות, נשמור במבנה נתונים כל פתרון שנחשב לתת בעיה. במקרה, אזי ערך הפתרון מאוכסן בטבלה [ בגודל nn כך שאם חישבנו כבר את שלנו, נבנה טבלה במקום ה- ].[, שיפור זמן ריצה על ידי שיטת הפתקאות (memozaton) בזמן ריצת האלגוריתם הרקורסיבי, לפני כל קריאה רקורסיבית נבדוק האם תת הבעיה הזו כבר חושבה )על פי הערך בטבלה בעלת ערך שונה מ- (, אם הערך חושב נשתמש בו ונחסוך קריאה רקורסיבית מיותרת )במחיר של חיפוש במבנה הנתונים(, אם הערך לא חושב, נחשב אותו ונאכסן את התוצאה במבנה הנתונים לשימוש עתידי. שיטה זו נקראת שיטת התזכור -.memozaton Memozed-Matrx-Chan(n) for to n do for to n do m[, ] return Looup-Chan(,n)
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי Looup-Chan(,) f m[, ] then return m[, ] else f then m[, ] else for to do q Looup-Chan(,) + Looup-Chan(+, )+ p p p f q m[, ] then m[, ] q return m[, ] ניתן לראות כי זמן החישוב של הפרוצדורה הוא ).O(n אלגוריתם איטראטיבי במקום לחשב את הפתרון בצורה רקורסיבית, נחשב את הפתרון "מלמטה למעלה" בצורה איטראטיבי ת. החישוב לתת בעיה באורך משתמש רק בתוצאות החישובים לתתי הבעיות באורך וכן הלאה. ז"א הנתונים הנדרשים לחישוב תת בעיה באורך l הם פתרונות עבור תתי בעיות באורך קטן מ- l אשר כבר חושבו ונמצאים בטבלה. זו בעצם בניית הטבלה מהאלכסון הראשי ומעלה. השגרה משתמשת בטבלת עזר m[..n,..n] לאחסון העלויות ובטבלת עזר s[..n,..n] שבה נרשמים האינדקסים שעבורם התקבלה עלות אופטימאלית בעת חישוב,m[,] כלומר זהו הערך שמפצלים בו את המכפלה A.. כדי לקבל הצבת סוגריים אופטימאלית. A Matrx-Chan-Order(n) for to n do m[, ] for l to n do for to nl do l m[, ] for to do q m[, ] + m[, ] + p p p f q m[, ] then m[, ] q s[, ] return m and s בקטע קוד הזה אנחנו מחפשים ומכניסים ל - s[,] את הערך שמפצלים בו את המכפלה A.. כדי לקבל הצבת סוגריים A אופטימאלית ע"י בדיקת הערכים =,..,- ומציאת המינימום.. A, A, A 5, A5 מכיוון שהגדרנו את m[,] עבור האיור הבא מדגים תהליך זה על המטריצות בלבד, אנו משתמשים רק במשולש הנמצא מעל האלכסון הראשי של הטבלה. באיור הבא, הטבלאות מסובבות כך שהאלכסון הראשי הוא בכיוון האופקי. העלות המינימאלית m[,] של חישוב תת המכפלה 5
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי A.. A A A לכיוון צפון-מזרח, והקו היוצא מ- תימצא בתא שבנקודת החיתוך בין הקו היוצא מ- כל שורה אופקית בטבלה מכילה תאים עבור סדרות מטריצות באותו האורך. השגרה מחשבת את השורות מלמטה למעלה ובכל שורה משמאל לימין. ערך התא p p p עבור =, +,, ובכל ערכי התאים לכיוון צפון-מערב. Matrx-Chan-Order(n) m[,] מחושב תוך שימוש במכפלות הנמצאים מדרום-מערב ומדרום-מזרח ל-[ m[,. 5 5 5 A A A A m s הוכחת נכונות של האלגוריתם האיטראטיבי יש לוודא כי בעת חישוב תא m[,] כל התאים בהם תלוי החישוב של תא זה חושבו כבר ואלו מכילים ערכי פתרונות אופטימאליים עבור תתי-הבעיות אותן הם מייצגים. יש להוכיח את שתי הטענות הבאות: טענה)ניתן להראות באינדוקציה(: בעת חישוב התא ה- m[,] כל התאים בשורה ה- מהעמודה ה- ועד העמודה ה- (-) וכל התאים בעמודה ה- מהשורה ה-( + ) ועד השורה ה- כבר חושבו על מבנה הנתונים )במקרה זה מטריצה(. טענה: )הטענה שמנסחת את הנוסחה הרקורסיבית(: התא m[,] אכן שווה ל- OPT(,) לאחר החישוב. כלומר יש להראות )באינדוקציה( שערך התא שווה לערך שמחושב על ידי הנוסחא שהוגדרה קודם,,, ] mn{, ], ] p p p }, 6
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי שחזור: כיצד למצוא סדרת הכפלות אופטימאלית ולא רק עלות בזמן מילוי הטבלה, בכל תא נחזיק גם את ה- שממנו הגענו לתוכן התא. כלומר, את הערך שמגדיר כיצד לחלק את בעיית ההכפלה {A {,...,A בצורה אופטימאלית. בעזרת ערכים אלו נוכל ע"י הליכה "אחורה" מהתא [n,] ו"איסוף" ה- -ים לשחזר את הצבת הסוגריים. : A, A, A, A 5 5 לדוגמא, במקרה של המטריצות שלנו l שלב : ++p*p*p = * * = K = + + p*p*p = * * 5 = K = + +p*p*p = *5* = K= l שלב : = ++p*p*p = +**5 = 5 = K= ++p*p*p = +** = 5 = K= l שלב : = 5 = K= +5+p*p*p= 5+** = 5 = 5 = K= ערך הפתרון האופטימאלי נמצא ב [,]: = 5 = K= 5 = 5 = K= 7
תכנון אלגוריתמים, אביב, תרגול מס' תכנון דינאמי שיחזור: נסתכל על התא הסדרה [,]. כיוון ש ההכפלה האחרונה בסדרה היא בין תת הסדרה { A ותת } ) A. A ( A A כעת נביט בתא } A,{ A, A, ז"א האופטימאלית של הסוגריים בתוך } A.{ A, A, בתא זה [,] על מנת למצוא את ההצבה, משמע סדר ההכפלות הוא )) A, A ( A ( A ובזאת סיימנו את השחזור. ניתוח זמן : מילוי הטבלה: ישנם ) ( On תאים בטבלה. n תאי האלכסון מאותחלים בזמן קבוע לכל תא. (n )O פעולות לכל זוגות של תאים שכבר חושבו, ובמקרה הכללי [ [, מצריך בדיקה של כל תא תא. סה"כ זמן מילוי הטבלה: (n )O..O( n) שיחזור ההצבה הליכה לאחור n שלבים כשכל צעד בזמן קבוע - וכמה מקום צריך? )חושדים או יודעים שפתרונה הוא( ע"י תכנון דינאמי, לסיכום: בהינתן בעיה שאתם שוקלים לפתור אותה אלה השלבים שמרכיבים את הפתרון:.OPT הגדרת הבעיות באופן מילולי והגדרת ניסוח נוסחת המבנה, כולל מקרי בסיס ומיקום הפתרון לבעיה המקורית. הוכחת נכונות של נוסחת המבנה: הגדרת תתי-קבוצות של פתרונות אפשריים לפי חלוקה למקרים. o הוכחה שתתי-הקבוצות הנ"ל מכסות את כל הפתרונות האפשריים. o הסקת הצורה הסכמאטית של נוסחת המבנה. o ניתוח כל תת-קבוצת פתרונות בנפרד, והוכחת המרכיבים המתאימים o בנוסחת המבנה. הפתרון ערך הפתרון האופטימאלי ו/או איטראטיבי/רקורסיבי למציאת מימוש האלגוריתם האופטימאלי עצמו )לפי הדרישה(. הוכחת נכונות של האלגוריתם: האלגוריתם פועל בהתאם לנוסחת המבנה. o בכל שלב בריצת האלגוריתם, כל ערך לו האלגוריתם זקוק, חושב o באחד מהשלבים הקודמים. ניתוח זמן ריצה. 8