הטכניון מכון טכנולוגי לישראל אלגוריתמים (3447) סמסטר חורף 006/007 הפקולטה למדעי המחשב תכנון דינאמי תרגיל תת מחרוזת משותפת ארוכה ביותר תת-מחרוזת z k שקיימת סדרה עולה ממש,... z = z של מחרוזת נתונה x m,...,, k... x X = x מעל א"ב של אינדקסים כך שלכל =,,...,k. x = z היא תת-מחרוזת משותפת של סימון: עבור מחרוזת נתונה X ו- Y אם היא תת-מחרוזת של X, Σ היא מחרוזת כך מתקיים כי וגם תת-מחרוזת של.Y מאורך X : X, את הרישא הבאה של 0 m, X נסמן ב-, m (עבור = 0... x X = x נקבל רישא ריקה). x יהיו X ו- Y שתי מחרוזות מעל א"ב Σ מאורך m ו- n בהתאמה. מהו אורך תת-המחרוזת המשותפת הארוכה ביותר של X ו- Y? טענה: תהא z k..., z = z תת-המחרוזת המשותפת הארוכה ביותר של X אם., x m = y n אזי k ו- z = x = y k m n X m ו-.Y n ו- Y הנתונים. אזי: היא תת-מחרוזת משותפת ארוכה ביותר של : x. אם m y n.y ו- X m אם א. zk x m אזי היא תת-מחרוזת משותפת ארוכה ביותר של.Y n ו- X אם ב. zk y n אזי היא תת-מחרוזת משותפת ארוכה ביותר של הוכחה: נוכיח כל מקרה בנפרד. : מקרה נניח בשלילה כי k x m. z אזי ניתן יהיה לשרשר לסוף את האיבר x m X ובכך נקבל מחרוזת משותפת של,( x m = y n ארוכה ביותר. ברור כי z z z k =... k ו- Y אשר יותר ארוכה מ- היא מחרוזת משותפת של X m ב, ו- (כי סתירה לכך ש-,Y n כל שנותר להראות הוא שהיא גם ארוכה ביותר. נניח בשלילה שלא, אזי קיימת מחרוזת משותפת ארוכה ביותר של X m ו- Y n שנסמנה W, אשר אורכה גדול ממש מ-. k על-ידי שרשור האיבר (כי ( x m = y n ל-,W נקבל מחרוזת משותפת ל- X ו- Y באורך גדול ממש מ- k סתירה. x m
מ ) k x m X m מקרה א.. (מקרה.ב דומה): ו- Y, כי. z נותר להראות כי תת-מחרוזת ארוכה m X ו- W,, Y אשר אורכה גדול ממש תת-מחרוזת משותפת של ביותר. נניח בשלילה כי קיימת תת-מחרוזת משותפת של X מ-. k אזי W גם מחרוזת משותפת של ו- Y (ארוכה יותר מ- ( סתירה..ש.ל.) 0 m ו-,Y X, נסמן ב- ( את אורך המחרוזת המשותפת הארוכה ביותר של,. )c לפי עובדה זו והטענה שהוכחנו ) 0. אם = 0 או = 0, אזי ברור כי = 0 ו- n קודם, ניתן לקבל את נוסחת הנסיגה הבאה: 0 = 0 or = 0, ) =, ), > 0, x = y max{, ),, )}, > 0, x y אם נחשב פונקציה זו באופן רקורסיבי, סיבוכיות הזמן תהיה אקספוננציאלית, זאת משום שיהיו ( m ) ( n ) ערכים של הפונקציה אשר יחושבו מספר פעמים. c ניתן לחשב את הפונקציה ביעילות בעזרת מטריצה (מספור האינדקסים,m. )c ניתן למלא את ערכי מטריצה זו שורה מתחיל מאפס), כאשר הערך שמעניין אותנו הוא (n אחר שורה, ובאופן זה נקבל אלגוריתם יעיל לפתרון הבעיה כי יש O(mn) תאים במטריצה כאשר () for = to m do: c (,0) 0 () for = to n do: c ( 0, ) 0 (3) for = to m do: (4) for = to n do:.o() (5) f x = y then c (, ), ) (6) else c (, ) max{, ),, )} זמן החישוב של כל תא הוא Y ו- X נעיר כי ניתן בזמן של (n O ( m למצוא את תת-המחרוזת המשותפת הארוכה ביותר של בעזרת המטריצה. c, ). n, n) הסבר: מתחילים מהתא., ) =, במידה ו- ( בשלב שבו נמצאים בתא במידה ומתבצע מעבר כזה, עוברים לתא מתקיים,. במידה ) =, ) אם, ) אם אין אפשרות כזו אז עוברים לתא ה -, ) =, ), ), ה- ). x = y וגם תנאי זה לא מתקיים, עוברים לתא (ומתקיים מהגדרת האלגוריתם). עוצרים כאשר מגיעים לתא ( )c,0 או,0) עבור, כלשהם.
, ( n, m ), p k m ו- n, n m תרגיל נתונה פיסת בד בגודל כאשר מספרים טבעיים לכל מספרים טבעיים. נתונות מידות k. לכל מידה נתון רווח מכירה m ו- n כאשר, k k. (לכל מידה שאינה נתונה, הרווח הוא 0.) המטרה היא לגזור את הבד כך שסך הרווח שיתקבל מגזרי הבד יהיה מרבי. בכל גזירה מותר לגזור פיסת בד לשניים, לאורכה או לרוחבה, כך שמתקבלים שני מלבנים שמידות כל אחד מהם הן מספרים טבעיים. לא ניתן לסובב את פיסת הבד או המלבנים שהתקבלו. מספר הגזירות אינו מוגבל. הציעו אלגוריתם אשר מוצא את הרווח ( nm( n m) ) המרבי שניתן לקבל מפיסת הבד הנתונה. על האלגוריתם לעבוד בזמן של O. 'c הרווח המקסימלי מפיסת בד בגודל שנגזרה ל- או יותר פיסות. (, ). הרווח ממכירת פיסת בד (לא גזורה) בגודל )p, ), )c הרווח המקסימלי מפיסת בד בגודל (גזורה או לא). ) פתרון: נגדיר: l l. c (, ) = max{ c'(, ), p(, אבחנה : לכל ו- מתקיים: {( c' (, ) אבחנה : אם א. מתקבל כאשר חוצים את פיסת הבד ע"י חתך אנכי ל- פיסות בד. c' (, ) =,, אזי 0 < l < ו- ( כך ש- c' (, אם ב. ( מתקבל כאשר חוצים את פיסת הבד ע"י חתך אופקי ל- פיסות בד. c' (, ) = ) ) אזי 0 < l < כך ש- ( ו- m m n n l l טענה : p(, ),, ) = max max{ ) )} max{,, } הוכחה: מיידית מההגדרות ומאבחנות ו-. (, בה התא ה- ( מייצג רווח C n m,n )c ביעילות נשתמש במטריצה על מנת לחשב את (m אפשרי מפיסת בד בגודל. 3
. for = to m do:. for = to n do: 3.,) 0 4. for = to k do: 5. n,m ) p 6. for = to m do: 7. for = to n do: 8. for l= to - 9.,) max{,), )-)} 0. for l= to -.,) max{,),,,-}. return n,m). O nm n m סיבוכיות: ניתן לראות כי סיבוכיות האלגוריתם היא ( ( )) הוכחת נכונות: נובעת מנכונות הטענה הבאה:., ) =, טענה : עם סיום הלולאה בשורות 0- מתקיים ( הוכחה: באינדוקציה על. c,) = p( n, m ) ( בסיס: =. מאחר ולא ניתן לחתוך פיסת בד בגודל אז אם קיים,( n אחרת = 0,). עפ"י האתחול,) מאותחל בהתאם ולא משתנה, m כך ש- (,) = ) בהמשך., ( ברגע ) ונסתכל על התא ה-, ' '< כך ש- ( ', ') לכל C ( ', ') = ', צעד: נניח כי (' חישוב ערכו. עפ"י טענה מתקיים כי., ) = max{ p(, ),max{ ) )},max{,, }} לכן עפ"י הנחת האינדוקציה מתקיים כי., ) = max{ p(, ),max{ ) )},max{,, }} 8-9,, ) = p(, ) נשים לב כי לאחר האתחול לכן לאחר שורות ולאחר שורות מ. מתקיים כי מתקיים כי.ש.ל. 0-, ) = max{ p(, ),max{ ) )}}, ) = max{ p(, ),max{ ) )},max{,, }}, בהתאמה. זאת משום ש(לדוגמא) ו- / ו-.3 4 הערה: בשורות 8 ו- 0 מספיק לרוץ עם l עד / לא משנה אם חותכים פיסת בד של 9 3 ל- פיסות 3 4 ו- 5 3, או ל- פיסות 5 3 שימו לב שלייצוג הקלט יש צורך ב- ((n O (log( m הקלט ב- N ביטים (בהנחה ש- k קבוע). כלומר, אם נייצג את גודל זמן הריצה אקספוננציאלי ב-. N למעשה, האלגוריתם אינו פולינומיאלי אלא פסאודו-פולינומיאלי. 4
תרגיל 3 קבוצה בלתי-תלויה מקסימום בעצים בהינתן גרף לא מכוון E) G = ( V, קבוצת צמתים V ' V נקראת קבוצה בלתי-תלויה. ( u, ) E כך ש- u, V ' אם לא קיימים (Independent Set) הציעו אלגוריתם שבהינתן עץ לא-מכוון (E T = ( V, מוצא קבוצה בלתי-תלויה מקסימום ב- T. פתרון: אלגוריתם חמדן (בוחר את כל העלים מגלח אותם וממשיך איטרטיבית). הציעו אלגוריתם לפתירת הבעיה הממושקלת בה לכל צומת יש רווח, ) ( w, ויש למצוא קבוצה בלתי-תלויה בעלת רווח מקסימום. שימו לב שהגירסא הלא ממושקלת הינה מקרה פרטי בו לכל צומת רווח של יחידה אחת. בעיה זו הינה דוגמא יפה המראה כי במקרים מסוימים האלגוריתם החמדן מספיק לגירסא הלא ממושקלת אך על מנת לפתור את הבעיה הממושקלת יש צורך להשתמש בתכנות דינאמי. פתרון: נכוון את קשתות T כך שיתקבל עץ מכוון (למשל ע"י הרצת DFS או BFS החל מצומת ונגדיר את הערכים הבאים לכל צומת : V ( r V () S משקל קבוצה בלתי-תלויה בעלת רווח מקסימום אשר מכילה את הצומת בתת-העץ שמושרש ב-. S () משקל קבוצה בלתי-תלויה בעלת רווח מקסימום אשר לא מכילה את הצומת העץ שמושרש ב-. עבור עלה. S ( ) = ו- 0 S ( ) = w( ) נחשב את הערכים הנ"ל עבור צומת, בהנחה שחושבו כבר לכל בניו של S ( ) = w( ) S ( u), בתת- chldren(), כך: S ( ) = u chldren( ) u chldren( ) max{ S ( u), S ( u)} גודל הקבוצה הבלתי תלויה מקסימום הוא כמובן {(r (. max{ S ( r), S. S ( r) > S ( r) שייך לקבוצה אם r לכל צומת אחר באופן הבא: אם u ב-( u S ( בחישוב שהוא בן של צומת נחליט האם u בקבוצה אז. S () חלק מהקבוצה הבלתי תלויה מקסימום u לא בקבוצה. אחרת, נחליט בהתאם לשימוש ב- (u) S או סיבוכיות: לאחר כיוון העץ (O(V ) ) הערכים הנ"ל. הזמן שיש להשקיע בכל צומת הוא יש לטייל עליו בסדר עבור גרפים כלליים לא ידוע אלגוריתם פולינומיאלי לבעיה. pre-order ולחשב לכל צומת את )d )O. לאחר חישוב הערכים ניתן לטייל על )) 5
העץ בסדר post-order על מנת למצוא את אברי הקבוצה. שוב הזמן שיש להשקיע בכל צומת הוא.O(V ) לכן סה"כ הזמן הוא )O, )d )) להלן דוגמה לחישוב קבוצה בלתי תלויה בגודל מקסימום בעץ כלומר המקרה הלא ממושקל שבו w ( ) = לכל צומת. לצד כל צומת מגדירים את הקבוצה הבלתי תלויה. מסומנים הערכים. S הצמתים הלבנים ( ), S ( ) שימו לב שהפתרון תואם לפתרון החמדני. להלן דוגמא למקרה הממושקל שבו האלגוריתם החמדן לא מייצר קבוצה בלתי-תלוייה בעלת רווח מקסימום. לעומתו, האלגוריתם המשתמש בתיכנות דינאמי מוצא פיתרון אופטימאלי. המשקל של הצומת רשום בתוכו. 0 0, 0 0,, 0, 0, 0, 0 0 0, 0 6
תרגיל 4 בעיית תרמיל הגב (Knapsack) נתון תרמיל שלו קיבולת משקל אפשרית נתונים משקל n ונתונים W עצמים,a,a,K an באופן שלכל עצם a w ורווח. בעיית תרמיל הגב היא בעיית בחירת תת-קבוצה של עצמים לאריזה p בתרמיל באופן שהרווח הכולל עבורם יהיה מקסימלי תוך שאיננו מפרים את אילוץ המשקל. פתרון: a, { בלבד a,..., a} את הרווח המקסימלי כאשר בוחרים עצמים מתוך הקבוצה )F, נסמן ב- (w כך שסכום משקליהם לא יעלה על ברור ש בנוסף: הסבר: F(, w), F(, w) = max{ F(, w), p. w. F(0, w ) = 0 > w F(, w w )}, otherwse w אם משקל העצם ה- גדול מ- w אחרת, הוא אינו יכול להיות חלק מהפתרון האופטימלי. יש לבחור את הטובה מבין שתי האפשרויות: () הרווח המקסימלי כאשר העצם ה- אינו חלק מהפתרון האופטימלי, ו-( ) הרווח המקסימלי כאשר העצם ה- חלק מהפתרון האופטימלי. ( n ) ( W ) סיבוכיות: נממש בעזרת מטריצה (נתעניין כמובן בתא ה- ( n,w בסיבוכיות 3. O(nW ) לדוגמה, נתונה המטריצה שתחושב עבור 4 פריטים במשקל 5,4,6,3 ורווח 0,40,30,50, בהתאמה. ותרמיל בגודל 0. שאלה: לאחר חישוב המטריצה, כיצד נמצא את הפתרון האופטימלי (פריטים ו- 4 בדוגמה)? 3 גם במקרה זה מדובר באלגוריתם פסאודו-פולינומיאלי. 7
תרגיל 5 בעיית הסוכן הנוסע -TSP) (Traelng Salesman Problem אחת הבעיות המפורסמות ביותר במדעי המחשב היא בעיית הסוכן הנוסע: נתונה רשת של n ערים {n,...,, { וביניהן כבישים כך כ- d מייצג את המרחק בין עיר לעיר. סוכן-נוסע רוצה לצאת מעיר, לבקר בכל שאר הערים בכל עיר פעם אחת בדיוק, ולחזור לעיר ממנה יצא. באיזה סדר עליו לבקר בערים כך שהמרחק שייסע יהיה קטן ככל האפשר? פתרון נאיבי יהיה לבדוק את כל ( n )! לא ידוע פתרון פולינומיאלי לבעיה) המבוסס על תכנון דינאמי. האפשרויות. נראה פתרון יעיל יותר (אך לא פולינומיאלי,A )c את מחיר המסלול הקל ביותר מ- ל- k אשר עובר דרך כל הצמתים בקבוצה נסמן ב- (k. A {,3,..., n} הפתרון האופטימלי יהיה: } mn{ c ({,3,..., n} \ { k}, k) d k n c ( A, k) mn{ A \ { }, ) dk,a )c יעשה עפ"י הנוסחה הבאה: } חישוב (k = A k סיבוכיות: יש לחשב ערכים, חישוב כל ערך מתבצע ב- O(n) לכן סה"כ O( n n ) O( n n ) טוב יותר מהפתרון הנאיבי. 8