1, .., sn] :טלק :Knapsack
Transcription
1, .., sn] :טלק :Knapsack
מונחים :גרף פשוט :ללא לולאות עצמיות וקשתות מקבילות .גרף אציקלי :ללא מעגלים .גרף קשיר :גרף לא מכוון עם מסלול בין כל זוג קדקודים.m ≥ n − 1 . גרף קשיר בחזקה :גרף מכוון עם מסלול מכוון בין כל זוג קדקודים .ניתן לפרק לרק"חים .עץ :גרף לא מכוון ,קשיר ואציקלי .מסלול אוילר :מסלול בגרף שעובר על כל קשת בדיוק פעם אחת .מעגל אוילר :מסלול אוילר שמתחיל ומסתיים באותו קדקוד .גרף דו צדדי :אמ"מ אפשר לצבוע את קדקודיו של גרף לא מכוון בשני צבעים ,כך שאף קשת לא מחברת בין שני קדקודים בעלי אותו צבע G = (U, W, E) .כך ש U ∩ W = ∅ ,U, W ⊆ V ואין קשתות בין Uל .Wזיווג :קבוצת קשתות זרות בקדקודים .גודל הזיווג = מס' הקשתות בקבוצה .זיווג מקסימום :זיווג עם מס' מקס' של קשתות מבין . nקדקוד מנתק :קדקוד בגרף לא הזיווגים שבגרף .זיווג מושלם :זיווג בגודל 2 מכוון אשר הסרתו )יחד עם הקשתות הסמוכות אליו( מגדילה את מס' רכיבי הקשירות של הגרף .קבוצת מוצא :קבוצת קדקודים אשר יש ממנה מסלול לכל קדקוד בגרף .גרף על :גרף המכיל קדקוד עבור כל רק"ח של הגרף המקורי. לכל זוג רק"חים עם קשת אחת לפחות בינם ,תהיה קשת אחת בין הקדקודים המייצגים אותם .תמיד אציקלי וניתן למיון טופ' .מעגל פשוט :עוברים על נמצא גם במעגל פשוט. כל קדקוד פעם .1כל קדקוד שנמצא במעגל רגיל , ייצוג גרפים :מטריצה :גרף מכוון/לא מכוון ללא משקל) O n2 :ביט 1או .(0גרף מכוון/לא מכוון עם משקלים .O n2 · log(W ) :1, . . . ., W רשימת שכנויות )מערך של הקדקודים ,כשמכל אחד מהם יוצאת רשימה מקשורת : של שכנים( .O (n · logn + m · logn) :שימושי כשהגרף דליל. ) δ(s, v־ המרחק הקצר ביותר בקשתות מ sל ∞ .vאם אין מסלול מ sל .vא"ש ה .δ(s, v) ≤ δ(s, u) + 1 ⇐ (u, v) ∈ E :4יהי uהקדקוד הלפני אחרון על מק"ב מ sל ,vאז .δ(s, u) = δ(s, v) − 1 :האלג': אתחול :לכל .d[v] = ∞, π[v] = N IL, col[v] = white :v ∈ V .d[s] = 0, col[s] = greyמכניסים את sלתור .כל עוד התור לא ריק ,מוציאים קדקוד ,uועוברים על כל השכנים שלו .לכל שכן ,אם צבעו לבן: ,col[v] = grey, d[v] + +, π[v] = uונכניסו לתור .בסיום טיפול בשכנים .col[u] = black :הפ' πמקודדת את המסלול הקצר ביותר )בכיוון ההפוך( .סיבוכיות .O(m + n) :שימושים :בדיקה האם יש מסלול מ uל .vמציאת אורכו של המסלול הקצר ביותר מ uל .vמציאת רכיבי קשירות בגרף לא מכוון .מציאת עץ מק"בים +גרף מק"בים מ sלשאר הקדקודים ) BF Sשזורק קשתות רק באותה רמה( .גרף מסלולים מ sל t־ BF S d[u] :־ זמן מ sו BF Sמ tב GTבלי לזרוק קשתות כלל. התחלת הטיפול ב f [u] ,u־ זמן הסיום .האלג' :מאתחלים את timeל ,0את הצבעים של כל הקדקודים ללבן ,את האבות שלהם ל .N ILבלולאה: אם הצבע של uלבן ,קוראים ל ) .DF S _visit(uבתוך DF S _visit ־ צובעים את uבאפור ו .d[u] = + + timeבלולאה ־ לכל vשכן של ,uאם הצבע שלו לבן ,π(v) = u ,וקוראים ל ).DF S _visit(v אחרי שהלולאה מסתיימת .f [u] = + + time ,תכונות פ' הזמן u :הוא צאצא של vאמ"מ ]] u .[d[u], f [u]] ⊂ [d[v], f [vהוא אב קדמון של vאמ"מ ]] u .[d[u], f [u]] ⊃ [d[v], f [vלא מיוחס ל vאמ"מ המקטעים ]] [d[u], f [uו ]] [d[v], f [vזרים .משפט המסלול הלבן u :אב קדמון של v ביער DF Sאמ"מ בזמן ] d[uיש מסלול מ uל vשכולו לבן .סיווג הקשתות: :T reeEdgeחלק מעץ ה :BackEdge .DF Sמצומת uלאב קדמון של ) uלא חלק מהעץ( :F orwardEdge .קשת מעבר לצאצא )לא חלק מהעץ(. :CrossEdgeקשת בין שני צמתים שאינן צאצאים .משפט :בעץ DF Sשל גרף לא מכוון כל הקשתות הן או T reeEdgeאו .BackEdgeלמה :גרף מכוון Gהוא אציקלי אמ"מ אין BackEdgeב ) .DF S(Gמיון טופולוגי: קיים לכל גרף אציקלי .זמני הסיום )] (f [uשל כל קדקוד קובעים את הסדר הטופולוגי ־ קדקוד מוקדם יותר הוא קדקוד בעל זמן סיום גבוה יותר .אלג' למציאת רק"חים (*) :מריצים ,DF Sושומרים ערכי (*) .fמגדירים ∗ ,DF S שעובר על הצמתים של Vע"פ הסדר העולה של ערכי ) (*) . f (uמריצים (*) .BF S ∗ GTכל עץ שמתקבל ביער ה ) DF Sהשני( הוא רק"ח של BFS DFS ) Gוגם של .(GTלמה :יהי ) G = (V, Eויהיו Cו C 0שני רק"חים ,כך ש .C 6= C 0נניח כי הקשת ) (u, v) ∈ Eכש .(v ∈ C 0 ,u ∈ Cאזי, ) ,f (C) > f (C 0כאשר ) .f (C) = maxv∈C f (vעפ"מ :הגדרות :חתך ) (S, V \S־ חלוקה של Vל 2קבוצות זרות .קשת חוצה חתך ־ קשת )(u, v כש u ∈ Sו .v ∈ V \Sחתך מכבד את A־ אין קשת ב Aשחוצה את החתך .קשת קלה ־ קשת חוצה חתך בעלת משקל מינ' .תתכן יותר מאחת .משפט: ) (u, vהיא קשת בטוחה עבור A ⊆ Eאם היא קשת קלה שחוצה חתך שמכבד את .Aקרוסקל :משתמשים ב .union − f indהאלג' (1) :ממיינים קשתות לפי משקל (2) .עוברים עליהן בסדר עולה :אם u, vלא שייכים לאותה הקבוצה ־ נעשה להם unionונצרף את ) (u, vלקבוצת הקשתות שטופלו .תמיד אפשרות לשנות את סדר בחירת הקשתות ,כדי לקבל עפ"מ מסוים )למשל עם מספר קשתות אדומות מקס'( .סיבוכיות) O (m · log(n)) :בגלל המיון( .פרים :בונים עץ החל מקדקוד מוצא שרירותי .בכל שלב מוסיפים לו קודקוד אשר עלות חיבורו לעץ היא מינימלית ־ את המינימום משיגים בעזרת תור עדיפויות .בכל פעם שולפים את המינ' uמהתור ,ועבור כל vשכן שלו בודקים ־ אם ),d[v] > d[u] + w(u, v ומעדכנים בהתאם .הערה :אם יש מס' קבוע של משקלים ,אפשר לעשות כמה לינארי ,וקרוסקל ב ) .α(m)log(nסיבוכיות :תלוי בזמן תורים ,ואז פרים פועל במימוש התור :מערך ־ ,O n2ערימת מינימום ־ )) ,O (m · log(nערימת פיבונאצ'י ־ )) .O (m + n · log(nבעיות מק"בים :בעיית היעד היחיד שקולה לבעיית המוצא היחיד .אין דרך לפתור את בעיית הזוג היחיד מלבד שימוש באלג' לבעיית המוצא היחיד ושליפת התוצאה עבור .tתכונות (1) :כל תת מסלול של מסלול מינ' מ sל vגם הוא מינ' ) (2יהי uהקדקוד הלפני אחרון על מסלול מינ' מ sל ,vאז ) (2) δ(s, v) ≡ δ(s, u) + w(u, vא"ש המשולש :לכל (u, v) ∈ Eמתקיים ) (4) δ(s, v) ≤ δ(s, u) + w(u, vאם אין מעגלים שליליים בגרף ,אז יש מסלול מינ' פשוט .שיטת פורד :לכל קודקוד d[v] :v משקל מינ' מ sל vשגילינו עד כה .בסוף ההרצה מתקיים ).d[v] = δ(s, v ] :π[vהקדקוד שנמצא לפני vעל המסלול המינ' שגילינו .אלג' מופשט :אתחל )∞ = ] π(v) = N IL ,d[vלכל ,(d[s] = 0 ,vובצע שיפורי קשתות כל עוד אפשר לשפר ,בעזרת ) :Relax(u, vאם )d(v) > d(u) + w(u, v אז d(v) = d(u) + w(u, v) :ו .π(v) = uאם יש מעגל שלילי נגיש מ ,sהאלג' לא יעצור .תכונות של ) :Relaxא( הערך של ] d[vיורד מונ' במהלך ריצת האלג') .ב( בכל שלב שבו ∞ = d[v] ,d[v] 6הוא משקלו של מסלול מ sל vאשר מגיע ל vדרך ]) .π[vג( בכל שלב) .d[v] ≥ δ(s, v) :ד( אם נבצע Relaxלקשתות במק"ב שמוביל לקדקוד vבסדר שלהן במסלול, נקבל כי ) d[v] = δ(s, vבלמן־פורד :מבצעים nאיטרציות שעוברות על כל הקשתות ,ומשפרים בעת הצורך .האלג' :מאתחלים ,ואז מבצעים Relaxים על כל הקשתות בתוך לולאה כפולה .עוברים עוד פעם על כל הקשתות ע"מ לתפוס מעגלים שליליים )אם יש אפשרות לשפר ־ קיים מעגל שלילי( .סיבוכיות: ) Θ (n · m־ nאיטרציות על כל mהקשתות .דייקסטרה :פועל רק על גרף עם משקלים אי שליליים .סדר הקדקודים במסלול הוא סדר עולה של מרחקם מ .sהאלג' :מאתחלים כרגיל .כל עוד לא ביקרנו בכל הקדקודים ,שולפים את uשעבורו ] d[uהוא המינימלי מבין אלה שטרם ביקרנו בהם .משפרים את כל הקשתות לשכניו של .uסיבוכיות :תלוי במימוש התור ־ ע"ׂע פרים .גרף מק"בים מ :sמריצים דייקסטרה )או .(BFעוברים על כל הקשתות ושומרים רק את אלה שמקיימות ) d[u] = d[v] + w(u, vמק"בים בין כל זוגות הקדקודים: פתרון נאיבי ־ הרצת BFמכל קדקוד ־ .O n2 mכפל מטריצות :נניח שאין מעגלים שליליים ,ונמספר את הקדקודים } .V = {1, ...nנגדיר i nל jשמכיל לכל היותר mקשתות. oמשקל המסלול המינ' במשקל מ ) dm (i, j־ ).dm (i, j) = min1≤k≤n dm−1 (i, k) + w(k, j מתקיים: כיוון שאין מעגלים שלילייםδ(i, j) = dn−1 (i, j) = dn (i, j) = : ....האלג' :מחשב את ) D (mבהינתן ) D (m−1ומטריצת המשקלים .Wעבור כל תא במטריצה )) D (mבתוך לולאה כפולה( עוברים על כל ה kים מ 1עד ) nע"ע הנוסחה למעלה( )לולאה שלישית( ,ומנסים למצוא את המסלול המינ' באורך לכל היותר mקשתות מ iל .jב Dכבר יש את המסלולים המינ' מכל קדקוד לכל קדקוד באורך לכל היותר m − 1 קשתות ,לכן ,צריך למצוא את ה kשנותן את dik + wkjהמינ' .סיבוכיות: ) O n4שלוש לולאות n ,פעמים( .אפשר לשפר ל )O n3 log(n אם משתמשים בעובדה ש .W 2k = W k · W kפלויד־ווארשל :נניח שאין מעגלים שליליים .נגדיר ) δk (i, j־ משקל המסלול המינימלי במשקל מ iל jשעובר רק דרך קדקודים }) {1, ..., kפרט ל .(i, jנקבל: ),δk (i, j) = min δk−1 (i, j), δk−1 (i, k) + δk−1 (k, j כאשר ) δk−1 (i, k) + δk−1 (k, jאומר שבחרנו לעבור ב , kו ) δk−1 (i, jאחרת .מימוש :מערכים דו ממדיים dעבור המרחקים ,ו pעבור המסלולים d[i, j] .־ משקל המסלול המינימלי מ iל jשמצאנו עד כה )לאחר k איטרציות מכיל את ) p[i, j] .(δk (i, j־ הקדקוד האחרון לפני jעל המסלול המינימלי מ iל jשמצאנו עד כה .האלג' :מאתחלים את המערכים ),d[i, i] = 0 אם (i, j) ∈ Eאז ) .(d[i, j] = w(i, jבלולאה הראשונה בודקים ־ אם d[k, k] < 0אז יש מעגל שלילי בגרף .בתוך שתי לולאות מקוננות ,לכל תא d[i, j] = d[i, k]+d[k, בודקים :אם ] ,d[i, j] > d[i, k]+d[k, jאז ] j ו ] .p[i, j] = p[k, jסיבוכיות :שלוש לולאות ־ .O n3ג'ונסון :נפעיל פונקציה על המשקלים בגרף ,כך שהמשקלים החדשים w0יקיימו 2תנאים.1 : מק"ב נשאר מק"ב תחת הפונקציה .2 .כל המשקלים אי שליליים .הפונקציה: נצרף קדקוד sל .Vנחבר אותו בקשתות לכל קדקודי הגרף )עם משקל .(0על יתר הקשתות נפעיל .w0 (u, v) = w(u, v) + δ(s, u) − δ(s, v) :את המרחקים ) δ(s, vנחשב באמצעות הפעלה יחידה של בלמן־פורד על .sהאלג': החדשה ,ומפעילים דייקסטרה מכל קדקוד .סיבוכיות: מחשבים את פונ' המשקלים ) .O m · n + n2 · log (nתכנות דינאמי :שלבי פתרון הבעיות.1 : הגדרת תתי בעיות .2 .מציאת הקשר לפתרון השאלה .3 .חישוב מקרי בסיס .4 .חישוב תתי בעיות באמצעות תתי בעיות קטנות מהן .5 .סיבוכיות. :קלט S = [s1 , .., sn ] :קבוצה של nעצמים ,כאשר לכל עצם siמותאמים שני ערכים wi :־ הנפח של bi ,si־ הערך של W .si־ נפח מקס' לכלל החפצים .פלט :תת קבוצה של Sאשר נפחה הכולל אינו עובר את Wוסכום ערכי העצמים בה מקס' )ביחס לשאר תתי הקבוצות שנפחן אינו עובר את .(Wהרעיון :נגדיר את ) B(i, wלהיות סכום הערכים המקסימלי שאפשר להרכיב מ s1 , s2 , ..., siשנפחם הכולל לא עובר את .wנחפש את ) .B(n, Wמתקיים :אם w < wiאז ) ,B(i, w) = B(i − 1, wאחרת: }) .B(i, w) = max {B(i − 1, w), bi + B (i − 1, w − wiתנאיי התחלה :אם w < wiאז ,B(1, w) = 0אחרת .B(1, w) = b1 האלג' :אתחול ־ נמלא את השורה הראשונה של הטבלה ) Vבטבלה תהיינה nשורות )החפצים( ו Wעמודות( .אתחול שורה ראשונה ־ נרוץ על wמ 0 ועד ,Wועבור כל wנבדוק :אם ) (w < w1אז ,V [1, w] = 0אחרת .V [1, w] = b1בתוך לולאה כפולה ,בכל שורה iועמודה wנבדוק :אם ) (w < w1אז ] ,V [i, w] = V [i − 1, wאחרת ,נחשב שני ערכים: ] valW ithIth = bi + V [i − 1, w − wiו = valW ithoutIth ] V [i − 1, wוב ] V [i, wנשים את המקס' מהם .סיבוכיות :מילוי כל משבצת במטריצה ־ ) .O(1במטריצה יש n · Wמשבצות ) Wקבוע( ,כלומר הסיבוכיות הסופית היא )גם זמן וגם מקום( .O(n · W ) :ניתן לחסוך במקום :תהי X = hx1 , ..., xm i ־ מספיק לשמור את השורה הקודמת. סדרה .אזי Z = hz1 , ..., zk iהיא תת"ס של Xאם קיימת סדרה עולה ממש של אינדקסים hi1 , ..., ik iשל Xכך שלכל j = 1, 2, ..., k מתקיים .xij = zjהרעיון :נגדיר את ] c[i, jלהיות האורך של LCS של Xiו Yjונקבל) c[i, j] = 0 (*) :אם i = 0או ,(j = 0 )*( ) c[i, j] = c[i − 1, j − 1] + 1אם i, j > 0ו (xi = yj )*( )]) c[i, j] = max (c[i, j − 1], c[i − 1, jאם i, j > 0וגם .(xi 6= yjהאלג' :אתחול ־ נבנה טבלה בגודל n) n × m־ אורך ,X m־ אורך .(Yנמלא את השורה הראשונה ואת העמודה הראשונה של הטבלה באפסים )תנאיי התחלה( .נריץ 2לולאות מקוננות ,אחת עד nואחת עד .mבכל שלב ,נבדוק :אם ) ,(xi = yjאז .c[i, j] = c[i − 1, j − 1] + 1 אחרת ,נבדוק :אם )] (c[i − 1, j] ≥ c[i, j − 1אז = ]c[i, j ] ,c[i − 1, jאחרת ] .c[i, j] = c[i, j − 1סיבוכיות :זמן ומקום ).O(mn רשת זרימה :הגדרות :פ' הזרימה חייבת לקיים שלושה אילוצים .1 :אילוץ הקיבול: ) .2 .f (u, v) ≤ C(u, vאנטי־סימטריה.f (u, v) = −f (v, u) : P .3שימור הזרימה :לכל u 6= s, tמתקיים . v∈V f (u, v) = 0 P P = | .|fהערה :זרימת = )v∈V f (s, v ערך הזרימהv∈V f (v, t) : ה־ 0תמיד חוקית .החתך :חתך ) (S, T־ חלוקה של Vלשתי קבוצות זרות כאשר s ∈ Sו .t ∈ Tקיבול חתך :סכום הקיבולים החוצים את החתך: P P = ) .C(S, Tזרימה בחתך :סכום הזרימות u∈S )v∈T C(u, v P P = ) .f (S, Tלכל חתך f (u, )v החוצות את החתך: u∈S v∈T ) (S, Tמתקיים ) .f (S, T ) ≤ C(S, Tלמת החתך :תהי fזרימה ,ויהי ) (S, Tחתך ,אז | .f (S, T ) = |fמשפט :M ax F low ,M in Cut תהי fזרימה ברשת .Gהתנאים הבאים שקולים f (1) :זרימה מקסימלית ב G ) (2בגרף השיורי אין מסלול מ sל ) tאין מסלול משפר( ) (3קיים חתך ) (S, T שעבורו ) ) |f | = C(S, Tחתך רווי( .מקרה פרטי ־ רשת :0 − 1הערכים הבאים שווים (1) :ערך הזרימה המקסימלית ) (2גודל החתך המינ' ) (3המס' Knapsack LCS המקס' של מסלולים זרים בקשתות ) (4מס' הקשתות המינ' שיש להסיר כדי לנתק את הגרף ) (5גודל זיווג המקסימום .חתך מינ' :קיום חתך מינ' המכיל קשת :e מקטינים את הקיבול של .eאם החתך המינ' קטן ,היה חתך מינ' שהכיל את .eהאם כל חתך מינ' מכיל את :?eמגדילים את הקיבול של .eאם החתך המינ' גדל e ,משתתפת בכל חתך מינ' .הגבלת זרימה ברשת :בקדקודים: משכפלים כל קדקוד ל־ 2קדקודים vin , voutובינם קשת בקיבול .1כל מסלול בזרימה חוקית ברשת זר בקדקודים .בקשתות :פשוט ניתן קיבול .1קשת דו כיוונית :אם יש קשת ) (u, vוגם קשת ) (v, uורוצים לוודא שרק אחת מהן תיבחר בזרימה ,נהפוך את הקשתות e1ו e2לקדקודים וניצור את הקשתות.(u, e1 ), (v, e1 ), (e1 , e2 ), (e2 , v), (e2 , u) : כל מסלול שעובר בקדקודים u, vיהיה חייב לעבור בקשת ) .(e1 , e2 זרימה בין קבוצות :עבור X, Y ⊆ Vהזרימה מ Xל Yהיא = ) f (X, Y P P . u∈Xתכונות :תהיינה X, Y, Z ⊆ Vקבוצות .אז: )v∈Y f (u, v )) (3) f (X, X) = 0 (2) f (X, Y ) = −f (Y, X) (1חוק הפילוג( אם ∩ X ∅ = Yאזf (X ∪ (b) f (Z, X ∪ Y ) = f (Z, X) + f (Z, Y ) (a) : ) .Y, Z) = f (X, Z) + f (Y, Zמציאת זרימה מקסימלית :פורד פלקרסון: )לא אלג' חמדן ־ מאפשר "חרטות"( .מושגים :קיבול שיורי :Cfכמות הזרימה שאפשר עדיין להזרים לאורך קשת.Cf (u, v) = C(u, v) − f (u, v) : תמיד מתקיים .Cf (u, v) ≥ 0ייתכן כי )) Cf (u, v) > C(u, vיכולה להיות זרימה שלילית בקשת( .הקיבול השיורי של מסלול :Pזהו הקיבול השיורי המינימלי לאורך .Cf (P ) = min(u,v)∈P Cf (u, v) :Pקשת משפרת: קשת ) (u, vשאפשר "להזרים" לאורכה עוד זרימה )קשת בלתי רוויה(. מסלול משפר :מסלול מ sל tשמורכב כולו מקשתות משפרות )קיבולו השיורי חיובי( .הגרף השיורי :Gfמכיל את כל הקשתות המשפרות )קשתות שקיבולן השיורי חיובי( ⇐ כל מסלול מ sל tב Gfהוא מסלול משפר .האלג'.1 : אתחול .2 .Gf (u, v) = G(u, v) .f (u, v) = f (v, u) = 0 :כל עוד יש מסלול מ sל tבגרף ) Gfמסלול משפר() :א( נמצא מסלול כזה Pונחשב את קיבולו השיורי ) ) Cf (Pב( נגדיל את הזרימה ב Gלאורך Pב ) :Cf (P לכל קשת ) (u, vבמסלול Pנעדכן ,f (u, v) = f (u, v) + Cf (P ) :ו ) .3 .f (v, u) = −f (u, vנעדכן את הגרף השיורי לאורך המסלול P־ לכל קשת ) (u, vבמסלול PנעדכןCf (u, v) = C(u, v) − f (u, v) : ו ) .Cf (v, u) = C(v, u) − f (u, vסיבוכיות :מס' איטרציות × עלות כל איטרציה .עלות כל איטרציה :תמיד )) O (m + n) = O (mגרף קשיר( ,נשתמש ב BF Sאו .DF Sמס' איטרציות M F :־ ערך הזרימה המקסימלית .אם הקיבולים שלמים ,O (M F · m) ,אם הקיבולים רציונליים, ) cd) O (M F · cd · m־ המכנה המשותף לכל הקיבולים( .אדמונדס־קארפ: האלג' (1) :אתחול :זרימה 0בכל הקשתות (2) .Cf (u, v) = C(u, v) ,כל עוד יש מסלול מ sל tבגרף ) Gfמסלול משפר() :א( נמצא מסלול Pמשפר ע"י BF Sונחשב את קיבולו השיורי ) ) Cf (Pב( לכל קשת ) (u, vבמסלול P נעדכן f (u, v) = f (u, v) + Cf (P ) :ו )(3) .f (v, u) = −f (u, v לכל קשת ) (u, vבמסלול Pנעדכן.Cf (u, v) = C(u, v) − f (u, v) : ) (4בסיום ,נחזיר את .fטענה :כל קשת יכולה להיות "צוואר בקבוק" )קיבולה nאיטרציות. כקיבול השיורי של המסלול המשפר עליו היא נמצאת( לכל היותר ב 2 mקשתות ,מס' האיטרציות חסום ע"י ) .O (m · nסיבוכיות: כיוון שיש ) O n · m2מס' האיטרציות חסום ע"י m · nועלות כל איטרציה נשארת לינארית ,כי BF Sלינארי( .טענה זו נכונה גם אם הקיבולים אינם שלמים. אם בוחרים תמיד מסלול משפר בעל קיבול שיורי מקסימלי ,והקיבולים שלמים, מס' האיטרציות אינו עולה על ) .2|m| · log (Cmaxדיניץ :הגדרות :גרף השכבות :גרף שכבות ה ) BF Sגרף המסלולים הקצרים ביותר BF S .שלא "מוחק קשתות" בין רמות עוקבות( של L (G) :Gf־ גרף זה מורכב אך ורק מהמסלולים הקצרים ביותר מ sבגרף השיורי .בשכבה kמופיעים כל הקדקודים שמרחקם מ sהוא .kהשכבה האחרונה תכיל את .tזרימה חוסמת :אמ"מ כל מסלול מ sל tכולל לפחות קשת אחת רוויה .האלג' (1) :אתחולf : זרימה ,0הגרף השיורי הוא Gעצמו (2) .כל עוד tנגיש מ ) :sא( בנה מהגרף השיורי את גרף השכבות )) L(Gב( מצא זרימה חוסמת gב )L(G )ג( עדכן .f = f + gמציאת זרימה חוסמת :כל עוד יש קשתות יוצאות מ sב (1) :L Gfהרץ DF Sעל L Gfמ ,sעד שתגיע לצומת vעם דרגת יציאה (2) 0אם ,v = tשפר את הזרימה לאורך מסלול ה DF Sמ sל tוסלק מ L Gfקשתות במסלול שהקיבול השיורי שלהן הפך ל ,0 וחזור חלילה מ (3) sאחרת ) ,(v 6= tסלק מ L Gfאת כל הקשתות הנכנסות אל ,vוהמשך בביצוע ה .DF Sסיבוכיות .עלות פאזה באלג' :הפאזה מורכבת מ (1) :בניית הרשת השיורית ־ )) O (mגרף קשיר( ) (2בניית רשת שכבות BF Sמ sעד t־ ) BF S) O (mלינארי( ) (3זמן מציאת זרימה חוסמת לרשת השכבות ־ )) t (n, mבהמשך( ) (4עדכון הזרימה ־ )O (m סה"כ .O (m + t (n, m)) :עלות מציאת זרימה חוסמת :הצעדים הם(1) : extend־ DF Sצועד לעומק retreat (2) .־ הגענו לקדקוד ללא קשתות יוצאות שאיננו breakthrough (3) .t־ הגענו ל .tעלות המציאה הכוללת: ,#extends + #retreats + n · #breakthoughsכי בפאזה מסוימת נעשה לקשת extendפעם אחת לכל היותר ,נעשה retreatפעם אחת לכל היותר מכל קדקוד )אם ביצענו ,retreatמחקנו את הקשתות הנכנסות לקדקוד זה ,ולא נוכל לחזור אליו שוב( וכל breakthroughעולה לנו ) O (n־ הגענו ל t־ צריך לחשב את הקיבול השיורי של המסלול וזרימה ־ מעבר על כל קדקודי המסלול .מתקיים) #breakthroughs ≤ m :כי מס' הדרכים להגיע ל tהוא לכל היותר ) ,O (mובכל פעם לפחות קשת אחת הופכת לרוויה(, ) #retreats ≤ mכי לפחות קשת אחת נמחקת כל פעם כתוצאה מפעולת (retreatו #extends ≤ #retreats + n · #breakthroughs )כי כל נסיגה עולה לנו בהרחבה ,וכל פריצה עולה לנו ב ) O (nהרחבות( .אז נקבל כיt (n, m) =≤ m + (m + n · m) + n · m = O (m · n) : .#extends + #reatreats + n · #breakthroughsסה"כ עלות פאזה .O (m · n) :טענה :מס' הפאזות באלג' דיניץ חסום ע"י n − 1כיוון שבכל פאזה המרחק בקשתות מ sל tעולה ממש )ואורך המסלול המקסימלי הוא .(n − 1הסיבוכיות .O n2 · m :מקרים פרטיים (1) :ר"ז 0/1־ הפאזות לאעולה לינארי ) ,O(mומס' הזרימההחוסמת בזמן אפשר למצוא את 2 1 2 √ Oו ,O n 3אז סך הכל.O min n 3 , m 2 · m : על m ) (2רשת ) (type − 2שבה לכל קדקוד )פרט ל sו (tיש או קשת כניסה יחידה בקיבול ,1או קשת יציאה יחידה בקיבול ,1וכל שאר הקיבולים הם √ .Oתכנות לינאריn : n·m מס'ים שלמים אקראיים .הסיבוכיות: משתנים m ,x1 , .., xnא"ש לינאריים )אילוצים( ,פ' מטרה לינארית )מינ' או מקס'( .פתרון פיזיבילי :הצבת ערכים ל x1 , .., xnכך שכל הא"ש מתקיימים .יכולות להיות 3אפשרויות (1) :קיים פתרון אופ' ) (2הפתרון לא חסום ) (3אין פתרון .צורה סט' (*) :פ' המטרה היא מקס' )*( כל האילוצים Pn )*( קיים אילוץ חיוביות על כל .xiהמרה מהצורה j=1 aij xj ≤ bi לצורה סט' :שוויון :נהפוך שוויון לשני א"ש ־ ≥ ו ≤ .חוסר אילוץ חיוביות: נהפוך את xiל ) ,(xi1 − xi2ונוסיף אילוץ לשניהם .xi1 , xi2 ≥ 0 א"ש הפוך )או פ' מטרה מינ'( :נכפול ב .−1צורת n (*) :Slackמשתנים P לא בסיסיים ו mמשתנים בסיסיים )*( פ' מטרה max v + j cj xj :מכילה רק מש' לא בסיסיים )*( אילוצי חיוביות לכל המשתנים )*( לכל משתנה בסיסי קיים P שוויון xk ) xk = bi − j aij xjבסיסי xj ,לא( .המרה לצורת :Slack Pn Pn bi − נהפוך ל = j=1 aij xj כל א"ש מהצורה j=1 aij xj ≤ bi xj ) xn+iהם משתנים לא בסיסיים xn+i ,כן( ונוסיף .xn+1 ≥ 0 הבעיה הדואלית (*) :מתחילים בצורה הסט' )*( כל משתנה הופך לאילוץ ,וכל אילוץ למשתנה )*( פ' המטרה הופכת למינ' )*( הא"ש משנים כיוון )*( אילוצי החיוביות נשארים ,אבל בשביל המשתנים החדשים .מעבר לדואלית :אם היה לנו Pn Pn ל ,i = 1, ..., m ,maxא"שj=1 aij xj ≤ bi : j=1 cj xj P ,min mא"ש b y נקבל: ,j = 1, .., n ל x ≥ אילוצים0 : j i=1 i i Pm ל ,j = 1, .., nאילוצים yi ≥ 0ל .i = 1, ..., m i=1 aij yi ≥ cj משפט הדואליות :אם ל קיים פתרון פיזיזילי אופ' ,אז ערך הפתרון האופ' של הבעיה הפרימאלית = ערך הפתרון האופ' של הדואלית .פיזיביליות לינארית: נתונים mא"ש ו nמשתנים .צריך למצוא הצבה המספקת את כל האילוצים. תרגילים וטענות מתרגולים :מסלול/מעגל אוילר :גרף )לאו דווקא פשוט( קשיר ולא מכוון מכיל מעגל אוילר אמ"מ לכל קדקוד u ∈ Vיש דרגה זוגית .גרף קשיר ולא מכוון מכיל מסלול אוילר )שאינו מעגל( אמ"מ הוא מכיל בדיוק שני קדקודים מדרגה אי זוגית .גרף דו"צ :גרף הינו דו"צ אמ"מ הוא אינו מכיל מעגל באורך אי זוגי .צביעת הגרף בשני צבעים (1) :נבחר שרירותית קדקוד ונריץ ממנו (2) BF Sאת הקדקודים ברמות הזוגיות בעץ ה BF Sנצבע בצבע אחד, והקדקודים ברמות האי זוגיות בשני .גרף מק"בים מ :sגרף ) G0 = (V, E 0 כך ש e ∈ E 0 :אמ"מ eחלק ממק"ב מ .sמציאת גרף המק"בים :נריץ מ BF S sעם שינוי ־ נזרוק מהגרף רק קשתות בין קדקודים באותה הרמה. סיבוכיות .O(m + n) :מציאת גרף המק"בים מ sל tבגרף מכוון :נריץ מ s BF Sשלא יזרוק קשתות ברמות עוקבות .נהפוך את קשתות הגרף ,ונריץ מ tאת ה BF Sהחדש .נהפוך בחזרה את קשתות הגרף .זהו ,DAGואפשר למצוא בו את גרף המסלולים הקלים ביותר בזמן לינארי )ע"י מיון טופולוגי וביצוע פעולות Relaxע"פ סדר טופ'( .סיבוכיות .O(m + n) :קדקודים מנתקים: מציאת כל הקדקודים המנתקים של גרף לא מכוון (1) :נריץ DF Sעל הגרף, ונשמור את זמני הגילוי ) (2יודעים ששורש הנו קדקוד מנתק אמ"מ יש לו לפחות 2ילדים ) (3עלה לא יכול להיות קדקוד מנתק ) (4תוך כדי הרצת DF Sנחשב לכל קדקוד )בזמן הסיום שלו(low[v] = min {d[v], d[u], low[u]} : כאשר ] d[uמחושב אם ) (v, uהיא קשת אחורית ,ו ] low[uמחושב אם u הוא צאצא של (5) vקדקוד vשאינו שורש או עלה בעץ הנו קדקוד מנתק אמ"מ קיים uבן של vאשר עבורו מתקיים ] .low[u] ≥ d[vסיבוכיות: ) . O(m + nקבוצת מוצא :מציאת קבוצת מוצא בגרף מכוון (1) :נבנה את גרף העל) :א( נחשב רק"חים ) ,DF Sהפיכת קשתות ושוב ) (DF Sב( נבחר קודקוד אחד מכל רק"ח להיות הנציג של הרק"ח )ג( גרף העל הוא אציקלי ,לכן ניתן למיין אותו טופולוגית ) (2נמצא את קבוצת המקורות :S )א( נעבור על קדקודי הגרף לפי הסדר הטופולוגי ,ולכל קדקוד vשנעבור בו ,נסמן את הקדקודים שיש ממנו קשת אליהם )ב( כאשר נגיע לקדקוד שאינו מסומן ,נכניס את אחד מקדקודי הרק"ח שהוא מייצג ל .Sסיבוכיות: ) .O(m + nבדיקת קיום מסלול העובר בכל קדקודי קבוצה (1) :S ⊆ V נמצא את הרק"חים של הגרף ) (2נחפש בגרף העל מסלול אשר עובר דרך כל הרק"חים המכילים לפחות איבר אחד מ ) :Sא( נמיין טופולוגית את גרף העל )ב( נטייל על גרף העל לפי הסדר הטופולוגי )ג( בכל פעם שנגיע לאיבר המייצג רק"ח רלוונטי ,נבדוק האם קיים מסלול ממנו אל הרק"ח הרלוונטי הבא )בסדר הטופולוגי( )ד( חיפוש מסלול מקדקוד vאל קדקוד uיתבצע באמצעות BF S מ־ vעל תת הגרף בין vלבין .uסיבוכיות .O(m + n) :עפ"מים :נתונים שני עפ"מים .T1 , T2טענה :לכל מס' ממשי rמתקיים :תהי E1,rקבוצת הקשתות של T1שמשקלן לכל היותר ) rכנ"ל E2,rו .(T2בגרפים V, E1,rו־ V, E2,rיש בדיוק אותם רכיבי קשירות .טענה :תהי α1 ≤ ... ≤ αn−1 רשימה ממוינת של משקלי קשתות .T1כנ"ל β1 ≤ ... ≤ βn−1ו .T2אז .∀i : αi = βiמציאת עפ"מ עם מס' קשתות אדומות מקס' :כל קשת בגרף צבועה בכחול או אדום .נרצה למצוא מבין העפ"מים את זה שמכיל את מס' הקשתות האדומות המקס' .דרך א :נגדיר קבוע εונתייחס למשקל של קשת כחולה eכאל .w(e) + εנריץ את קרוסקל על הגרף עם פ' המשקל החדשה ,ונמצא עפ"מ .בחירת (1) :εאם נסמן את משקל העפ"מים בגרף המקורי בתור ,mואת משקל העץ השני הקל ביותר ב ,m2נרצה שיתקיים.m + (n − 1)ε < m2 : ) (2אפשר לקחת ,ε < ∆minכאשר ∆minהיא ההפרש הקטן ביותר בין משקלי 2קשתות בגרף )לוקח הרבה זמן( .סיבוכיות :כמו של קרוסקל .דרך ב: נסדר את הקשתות לפי משקל ואז לפי צבע בהרצת קרוסקל .סיבוכיות :כמו של קרוסקל .מס' קבוע של משקלים :שומרים תור נפרד לכל משקל )ולאינסוף(, ומריצים פרים .שומרים מצביע מהקדקוד לאיבר בתור .כשרוצים לעדכן את ערך ] , d[vמוציאים את vמהתור ,ומעבירים אותו לתור האחר בזמן קבוע .סיבוכיות: לינארית .בלמן פורד :ארביטראז' :נתונים nסוגי מטבעות ,וטבלת מחירי המרה ביניהם .תארו אלג' הבודק האם ניתן להתחיל עם מטבע אחד מסוג iולבצע סדרת המרות שבסופה נקבל יותר ממטבע אחד מסוג .iפתרון ai,j (1) :־ מס' מטבעות cjשאפשר לקבל תמורת מטבע (2) .ciנבנה גרף מכוון Gעם צומת לכל סוג מטבע ,וקשת בין כל זוג צמתים ) ai,j (3־ משקל הקשת (4) ci , cjהמשקל של מעגל ci1 → ... → ci → ci1יהיה .ai1 ,i2 + ... + ai ,i1 k k ⇒⇐ מחפשים מעגל שמקייםai1 ,i2 + ... + ai ,i1 > 1 : k ⇐⇒ log ai1 ,i2 + log ai2 ,i3 + ... + log ai ,i1 > 0 k (5) −log ai1 ,i2 − log ai2 ,i3 − ... − log ai ,i1 < 0 k לקשת מ ciל cjניתן משקל (6) −log ai,jקיים רצף המרות שמביא לרווח אמ"מ בגרף החדש יש מעגל שלילי ) (7נשתמש ב BFבסיבוכיות .O n3 הגרף קשיר בחזקה ולכן נוכל להריץ BFמכל קדקוד .המסלול הקל לקדקוד: אין מעגלים שליליים .לכל v ∈ Vמגדיריםδ ∗ (v) = minu∈V δ(u, v) : ־ משקל המסלול הקל ביותר מהמסלולים שמסתיימים ב .vתארו אלג' שמחשב את כל ערכי ) .δ ∗ (vפתרון (1) :תמיד יהיה אי חיובי )כי קיים מסלול באורך 0מהקדקוד לעצמו( ) (2נוסיף קדקוד sונוציא ממנו קשתות במשקל 0לכל (3) v ∈ Vנריץ ,BFועבור כל קדקוד v ∈ Vנציב ).δ ∗ (v) = δ(s, v סיבוכיות :כמו של .BFמעגל במשקל :0נתון שאין מעגלים שליליים .האם קיים מעגל במשקל ?0פתרון (1) :נוסיף קדקוד sוקשת במשקל 0לכל (2) .v ∈ Vנריץ BFמ (3) sניצור תת גרף G0 = hV, E 0 i כאשר })) E 0 = {(u, v) ∈ E | δ(s, v) = δ(s, u) + w(u, vגרף המק"בים שיוצאים מ ,(sכלומר ,קשת נשארת בגרף אמ"מ היא חלק ממק"ב היוצא מ (4) sאם קיים בגרף מעגל ,בהכרח משקלו (5) 0אם היה מעגל במשקל 0ב ,Gהוא קיים ב .G0סיבוכיות :כמו של .BFדייקסטרה: מציאת הילוך קל עם קשתות בצבעים :נתון גרף מכוון . w(e) ≥ 0 ,כל קשת בגרף צבועה באדום או כחול .תארו אלג' למציאת ההילוך הקל ביותר מ sל tמבין ההילוכים עם מס' זוגי של קשתות אדומות )אפשר לחזור על קשתות(. פתרון (1) :נפצל כל קדקוד v ∈ Vלשני קדקודים (2) vo , ve ∈ V 0 vo־ הגענו ל vאחרי מס' א"ז של קשתות אדומות ,ו veאחרי מס' זוגי ) (3לקשתות אדומות (u, v) ∈ Eנגדיר(ue , vo ) , (uo , ve ) ∈ E 0 : ) (4לכחולות (u, v) ∈ E־ (5) (ue , ve ) , (uo , vo ) ∈ E 0נחפש ב G0את המסלול הקל ביותר מ seל .teסיבוכיות :כמו של דייקסטרה. מק"בים עם משקלים שליליים :נתון גרף מכוון .w(e) ≤ 0 ,s ∈ V ,אין מעגלים שליליים .תארו אלג' למציאת מק"בים מ sאל שאר הקדקודים .פתרון: ) (1פתרון נאיבי ־ BFמ .sסיבוכיות (2) O (mn) :נתון שאין מעגלים שליליים בגרף ⇐ המעגלים היחידים שיכולים להיות הם מעגלים במשקל ⇐ 0 אם קיים רק"ח ,כל הקשתות בו במשקל .0כלומר ,לקדקודים באותו רק"ח יהיו מק"בים באותו משקל .מספיק למצוא את המרחק של כל רק"ח מ (3) s נבנה את גרף העל ונמצא את המק"בים בו .סיבוכיות :בגרף אציקלי אפשר למצוא מק"בים בזמן לינארי .משקלים עם הגבלה :נתון s ∈ Vופ' משקל } .w : E → {0, 1, 2תארו אלג' למציאת מק"בים מ .sפתרון(1) : פתרון נאיבי ־ דייקסטרה מ .sסיבוכיות (2) .O (m + nlogn) :נשפר את דייקסטרה .נשנה את תור העדיפויות ,כך שכל פעולה תדרוש זמן קבוע ,ונקבל אלג' עם זמן ריצה לינארי .משקל כל מסלול יהיה בין 0ל )) 2(n − 1או אינסוף( .נחזיק מערך בגודל ,2nכך שכל תא יתאים למשקל אפשרי של מק"ב. איברי הרשימה בתא iיתאימו למסלולים במשקל iשבוחנים בשלב זה .עלות הוצאת האיבר המינ' מהתור) :א( נחזיק משתנה pשיצביע לתא המינימלי שאינו ריק במערך .בפעולת extractM inנוציא את האיבר שנמצא בראש הרשימה אשר בתא ש pמצביע אליו ־ )) .O(1ב( מס' התא ש pמצביע עליו יכול רק לגדול ,ולכן סך עלות העדכון של pהיא ) .O(nסה"כ סיבוכיות זמן ומקום: ) .O(m + nהערה :אם משקלי הקשתות האפשריים הם },{0, 1, 2..., k הסיבוכיות עולה ל ) .O (m + knתכנות דינמי :מנורות וקומות n :קומות ו mמנורות .רוצים לדעת כמה זריקות נצטרך לכל היותר כדי לדעת בוודאות מאיזו קומה מנורה נפתחת .תתי בעיות c(w, f ) :־ מס' הזריקות שצריך עבור wמנורות ו fקומות .הקשר לפתרון :נרצה למצוא את )c(n, m בסיס .∀j : c(1, j) = j ,∀k : c(k, 1) = 1 :חישובc(k, j) = : .mini {max [c(k, j − i), c(k − 1, i − 1)]}+1סיבוכיות :מחשבים ) c(k, jלכל ,k, jכלומר סך הכל ) O(mnחישובים .כל חישוב הוא לכל היותר nהשוואות של 2ערכים שכבר חישבנו ,וחישוב מינימום על n ערכים ־ ) .O(nסה"כ: .O mn2מסיבה :מארגנים מסיבה .לכל עובד יש רמת כיפיות .לא מזמינים שני אנשים כשאחד הבוס הישיר של השני, ולכן מחזיקים את עץ הכפיפויות של העובדים .רוצים למצוא את תת קבוצת העובדים עם רמת הכיפיות המקס' .תתי בעיות :לכל צומת vבעץ נגדיר : )*( ) f un+ (v־ הכיפיות המקס' לתת העץ של שורש vכש vמוזמן )*( ) f un− (v־ כנ"ל ,כש vלא מוזמן )*( ) f un(v־ רמת הכיפיות של (*) v ) child(v־ קבוצת הבנים הישירים של vבעץ .הקשר לפתרון r :־ שורש n o העץ .רוצים למצוא max f un+ (r), f un− (r) :בסיס :אם vעלה : )*( ) .f un− (v) = 0 (*) f un+ (v) = f un(vחישוב :אם vאינו P − f un+ (v) = f un(v) + עלה אזu∈child(v) f un (v) (*) : P + = ).f un− (v max f un (v), )*( )f un− (v )u∈child(v סיבוכיות :אם מס' העובדים הוא (1) :nלכל עובד מחשבים 2ערכים ,כאשר כל ערך יכול לדרוש חישוב סכום של ) O(nאיברים ) (2כיוון שכל עובד מופיע רק בשני סכומים )בחישוב הערכים של אבא שלו( ,סך החישובים לכל הסכומים הוא ) .O(nסך הכל .O(n) :סידור מילים בשורה :נתונים nמילים שאורכן . l1 , ..., lnשורה מכילה mתווים .בין המילים יש בדיוק רווח אחד )ייתכן רווח גדול יותר בסוף שורה( si .־ מס' הרווחים בסוף השורה ה .i Pk−1 2 = .uglinessתארו אלג' עבור סידור המילים ב kשורותi=1 si : שמוצא סידור של מילים בשורות אשר מביא את הכיעור למינ' .תתי בעיות: )*( נגדיר את מס' הרווחים בסוף שורה שמתחיל במילה ה iומסתיימת ב Pj j − i) s(i, j) = m −הם הרווחים( l − (j − i) :j k=i k )*( נגדיר עלות שורה שמתחילה במילה iומסתיימת ב ) lc(i, j) :jמקבל ∞אם 0 ,(si, j) < 0אם ) j = nשורה אחרונה( ו s(i, j)2אחרת( )*( נגדיר ] c[j־ הכיעור המינ' לפסקה שמורכבת מ jהמילים הראשונות. הקשר לפתרון :רוצים למצוא את ] c[nבסיס .c[1] = lc(1, 1) :חישוב: }) .c[j] = min1≤i≤j {c[i − 1] + lc(i, jסיבוכיות (1) :מחשבים n ערכים של ] .c[jלצורך זה נצטרך O n2ערכים של ) lc(i, jו )(2) s(i, j חישוב ערך של ) s(i, jלוקח זמן קבוע אם משתמשים בערך של )s(i, j − 1 lc(i,בזמן קבוע ) (4כלומר חישוב של ] c[jלוקח ) O(nזמן ) (3חישוב )j mמילים. .O n2שיפור :שורה יכולה להכיל לכל היותר ) (5סה"כ: 2 m לכן (*) :אפשר להניח שמתקיים ∞ = ) lc(i, jכאשר j − i > 2 )*( נצטרך לחשב רק ) O(nmערכי ) (*) lc(i, jנשנה את ההגדרה של ] c[jלהיות }) (*) c[j] = minj− m ≤i≤j {c[i − 1] + lc(i, jחישוב 2 של ] c[jיעלה ) (*) O(mסה"כ סיבוכיות .O(mn) :רשתות זרימה: מס' מקורות ובורות :נתונה ר"ז עם מס' מקורות ומס' בורות .הראו שניתן למצוא זרימה מקס' ע"י שימוש באלג' לבעיה המקורית .פתרון :נוסיף "מקור על" וממנו קשתות לשאר המקורות עם קיבול אינסופי ,ו"בור על" עם קשתות אליו משאר הבורות עם קיבול אינסופי .זרימה בשלמים :נתונה ר"ז עם קיבולים שלמים .הוכח שערך הזרימה המקס' שלם .פתרון :כל הקיבולים ברשת שלמים ⇐ הערך של כל M axF low\M inCut ⇐ חתך ברשת שלם ⇐ הערך של החתך המינימלי שלם ערך הזרימה המקסימלית שלם .זרימה בשלמים :2רוצים להראות שהשיטה של F Fמוצאת זרימה מקסימלית fכך שלכל f (u, v) ,u, v ∈ Vשלם .פתרון: נוכיח באינדוקציה על מס' הזרימות שהאלג' חיבר עד כה .בסיס :מצאנו 0 מסלולים ,אז לכל קשת יש זרימה .0צעד :מצאנו זרימה fשבה בכל קשת עוברת זרימה שלמה .יהי pמסלול ברשת השיורית של (1) .fמההנחה ,כל הקיבולים ברשת השיורית שלמים (2) .גודל הזרימה שנעביר דרך pהנו הקיבול המינימלי מקיבולי קשתות ,pולכן מדובר בערך שלם .מסלולים זרים בקשתות +קשתות מנתקות :נתון גרף מכוון וצמתים .s, tמס' מקס' של מסלולים זרים בקשתות מ sל tשווה למס' מינ' של קשתות שיש לנתק ע"מ שלא יהיה מסלול מ sל .tפתרון )לשתי הבעיות( :ניתן לכל קשת קיבול ) 1מקבלים מקסימליתמ sל ) tשווה בערכה למס' הרצוי(. ונמצא זרימה רשת ,(0 − 1 1 סיבוכיות: 2 n3 ,m2 m · min .Oמסלולים זרים בקדקודים :נתון גרף מכוון וצמתים .s, vתארו אלג' אשר מוצא את המס' המקס' של מסלולים זרים בקדקודים מ sל .tפתרון :ניתן לכל קשת קיבול .1בנוסף ,נפצל כל קדקוד ) vפרט ל sו (tלשני קדקודים ,vin , voutעם קשת מ vinל voutבקיבול .1 אמ"מ הם זריםבקדקודים .נמצא את זרים בקשתות ברשת שהתקבלה ,מסלולים 2 1 .O m · min n 3 , m 2זיווג מקסימום: הזרימה המקסימלית בזמן נתון גרף דו"צ ) .G = (U, W, Eתארו אלג' המוצא זיווג מקסימום בגרף. פתרון :נהפוך את Gלר"ז (1) :נכוון את כל הקשתות מ Uל (2) Wנוסיף קדקוד sוניצור ממנו קשתות לכל קדקודי (3) Uנוסיף קדקוד tוניצור קשתות אליו מכל קדקודי (4) Wניתן לכל הקשתות קיבול .1קיבלנו ר"ז 1־ .0נמצא זרימה מקסימלית מ sל .tגודל הזרימה המקסימלית שווה לגודל הזיווג המקסימום, וקבוצת הקשתות הרוויות מ Uל Wהנה זיווג מקסימום .סיבוכיות :בניית הרשת √ ־ זמן לינארי .מציאת הזרימה ־ דיניץ ב .O m · nמכונות ומשימות: נתונות nמכונות ו mמשימות .מכונה iיכולה לבצע niמשימות .לכל משימה נתונה רשימת המכונות שיודעות לבצע אותה .תאר אלג' אשר בוחר לכל משימה את המכונה שתבצע אותה ,או מודיע שלא קיימת השמה כזה .פתרון: נהפוך את הבעיה לבעיה בזרימה (1) :ניצור גרף דו"צ ,שבו קבוצת קדקודים אחת היא המשימות ,והשנייה היא המכונות ) (2נעביר קשתות בקיבול 1מכל משימה למכונות שיודעות לבצע אותה ) (3ניצור קדקוד sוממנו קשתות בקיבול 1לכל mהמשימות ) (4ניצור קדקוד tואליו קשתות בקיבול niעבור כל מכונה .i כעת נחפש זרימה בגודל .mסיבוכיות :מס' הקדקודים ־ .m + n + 2מס' הקשתות שלהמשימות( .דיניץ ירוץ אורכי הקשתות ־ M ) m + n + M־ סך ב ,O mn2 = O (m + n + M ) · (m + n)2 :אבל F Fחסום ע"י k .O (m (m + n + M )) :קשירות :גרף מכוון נקרא k־קשיר אם בין כל זוג קדקודים שלו יש לפחות kמסלולים זרים בקשתות )בכל כיוון( .נתון גרף מכוון Gוקבוע .kתארו אלג' אשר בודק האם Gהוא k־קשיר .פתרון :עבור כל זוג קדקודים v, u ∈ Vנבדוק האם יש בינם kמסלולים זרים בקשתות 2 )לכל זוג קדקודים( ברשת .0 − 1 )בשני דיניץ nפעמים הכיוונים( .מריצים 1 סיבוכיות: 2 n3 ,m2 n2 m · min .Oשיפור :1אין צורך למצוא מספיק להריץ F Fולעצור אחרי kמסלולים משפרים .סיבוכיות: זרימה מקס' , .O n2 · m · kשיפור :2נבחר קדקוד כלשהו v ∈ Vונבדוק שיש k מסלולים זרים בקשתות בינו לבין כל אחד מהקדקודים האחרים )בשני הכיוונים(. סיבוכיות .O (n · m · k) :מציאת חתך מינ' :נתונה ר"ז וזרימה מקס' .fתארו אלג' למציאת חתך מינ' .פתרון :נבנה את הרשת השיורית ביחס ל .fנריץ BF S מהמקור ונכניס את כל הקדקודים שבעץ ה BF Sלתוך .Sשאר הקדקודים יהיו ב .Tסיבוכיות .O(m + n) :כיסוי לוח שחמט עם אבני דומינו :נתון לוח שח בגודל ,n × nלאחר שהוסרו ממנו חלק מהמשבצות .תארו אלג' שבודק האם ניתן לכסות אותו ע"י אבני דומינו .פתרון :נבנה גרף (*) :ניצור קדקוד לכל משבצת )*( ניצור קשת לכל זוג משבצות סמוכות .זהו גרף דו"צ ־ צד לקדקודים של המשבצות השחורות ,וצד ללבנות .קיים כיסוי חוקי של אבני דומינו אמ"מ קיים זיווג מושלם בגרף .ע"מ למצוא זיווג מקס' בגרף דו צדדי בונים רשת מטיפוס ) 2רשת שבה לכל קדקוד )פרט ל sו (tיש או קשת יציאה יחידה בקיבול ,1שאר הקיבולים הם קשת כניסה יחידה בקיבול ,1או √ שלמים אקראיים( .סיבוכיות) O m n = O n2 :יש ) O(nקשתות לכל היותר ־ מכל קדקוד יש עד 4קשתות ,ומס' הקדקודים הוא .(O n2 משפט :Hallעבור גרף דו"צ לא מכוון ) G(U, W, Eותת קבוצה X ⊆ U נגדיר .N (X) = {y ∈ W : (x, y) ∈ E for some x ∈ X} :נתון גרף דו"צ ) G = (U, W, Eכך ש .|U | = |W | = nצ"ל :קיים זיווג מושלם בגרף אמ"מ לכל תת קבוצה X ⊆ Uמתקיים |).|X| ≤ |N (X כיוון ראשון (*) :נניח שקיים זיווג מושלם בגרף )*( נבחר זיווג מושלם ,ונסמן ב Y ⊆ Wאת קבוצת הקדקודים שמתאימים בזיווג לקדקודים (*) Xמתקיים | |X| = |Yוגם ) ,Y ⊆ N (Xלכן |) .|X| = |Y | ≤ |N (Xכיוון שני (*) :נניח שלכל תת קבוצה X ⊆ Uמתקיים |)(*) |X| ≤ |N (X נהפוך את הגרף לר"ז ,אך לקשתות מ Uל Wניתן קיבול אינסופי )*( גודל הזרימה המקס' שווה לגודל הזיווג המקס' )*( נניח בשלילה שלא קיים זיווג מושלם. נסמן את גודל הזיווג המקס' ב .k < |W | = |U | = nז"א שקיים חתך S, Tבגודל (*) kנסמן) :א( ) A = S ∩ Uב( B = T ∩ U )ג( ) C = S ∩ Wד( (*) D = T ∩ Wלא תיתכן קשת מ Aל ,D כיוון שאז לחתך יהיה ערך אינסופי .כלומר (*) N (A) ⊆ Cלכן ,בחתך יש רק קשתות מ sל Bומ Cל .tכלומר (*) .|B| + |C| = kנקבל סתירה להנחה.|N (A)| ≤ |C| = k − |B| < |U | − |B| = |A| : תת גרף עם דרגות :1נתון גרף מכוון .Gתארו אלג' המוצא קבוצת קשתות ,E 0 ⊆ Eכך שלכל קדקוד בגרף ) G0 = (V, E 0דרגת כניסה 1ודרגת יציאה ) 1או מודיע שלא קיימת( .פתרון (*) :נבנה גרף דו"צ ) ∗ G = (U, W, Eכך ש .U = W = Vנסמן } W = {w1 , ..., wnו } U = {u1 , ..., un )*( לכל קשת vi , vj ∈ Eניצור קשת ∗ (*) ui , wj ∈ Eנבדוק האם קיים בגרף זיווג מושלם )ע"י מציאת זיווג מקס'( )*( אם מצאנו זיווג מושלם ,נחזיר את קבוצת הקשתות בגרף המקורי אשר מתאימות לקשתות הזיווג )*( אחרת, נודיע שלא קיים תת גרף מתאים .אילוצי דרגות :נתון גרף לא מכוון .Gתארו אלג' אשר מכוון את קשתות הגרף ,כך שבגרף שהתקבל לכל קדקוד תהיה דרגת יציאה ≥ ) 3או מודיע שלא קיים כיוון כזה( .פתרון :נבנה גרף דו"צ ,וממנו נבנה ר"ז (1) :נוסיף קדקוד עבור כל קדקוד של הגרף המקורי ) (2) (Uקדקוד עבור כל קשת של הגרף המקורי ) (3) (Wנעביר קשתות מכל קדקוד ב Uלקדקוד ב ,Wאם בגרף המקורי הקדקוד שב Uסמוך לקשת שב .Wניתן קיבול 1לכל קשת כזו ) (4נוסיף קדקוד ,sונעביר ממנו קשתות בקיבול ) 3דרגת היציאה( לכל קדקוד ב (5) Uנוסיף קדקוד ,tונעביר אליו קשתות בקיבול 1מכל קדקוד ב .W קיים כיוון תקין של הגרף אמ"מ גודל הזרימה המקסימלית הנו | .|Eסיבוכיות: גודל הרשת :קדקודים ,|V 0 | = O(m+n) :קשתות.|E 0 | = O(m+n) : זמן ריצה :הרצת דיניץ )לא 1־ (0־ | ,O |V 0 |2 · |E 0כיוון הקשתות בהתאם לזרימה ־ ) ,O(mהרצת F F־ )) .O (m(m + nשיפור :נרצה לקבל רשת .0 − 1נפרק כל קדקוד ל־ 3קדקודים בצד השמאלישל הרשת .ניתןלכל p הקשתות מהמקור לקדקודים הללו קיבול .1זמן ריצהO |E 0 | · |V 0 | : תכנות לינארי :פריאמלי+דואלית :רוצים לתת משקל ≤ 0לכל הקשתות ,כך שסכום המשקלים יהיה מקס' .לכל קדקוד סכום משקלי הקשתות הסמוכות ≥ .1 P פתרון :לכל e ∈ Eניצור ,xeונרצה למצוא .max e∈E xeלכל v ∈ V P ניצור אילוץ ) v∈e xe ≤ 1סכום על הקשתות שמכילות את הקדקוד( .נוסיף אילוצי חיוביות .יש משתנה לכל קשת ואילוץ לכל קדקוד .התכנית הדואלית: P | P|V ל yv ≥ 0 ,e ∈ Eל .v ∈ V v∈e yv ≥ 1 ,min v=1 yv יש משתנה לכל קדקוד ואילוץ לכל קשת .התכנית הדואלית פותרת את הבעיה: רוצים לתת משקל ≤ 0לכל קדקוד ,כך שסכום משקלי הקדקודים מינ' .עבור כל קשת ,סכום משקלי הקדקודים שהיא נוגעת בהם נדרוש להיות לפחות .1 פיזיביליות לינארית ) (1) :(LFנתון אלג' לפתרון .LPכיצד פותרים בעזרתו בעיית ?LFפתרון :נוסיף פ' מטרה כלשהי )למשל (min 0ונקבל בעיית .LP ) (2נתון אלג' לפתרון .LFכיצד פותרים בעזרתו בעיית ?LPנשתמש באילוצים P Pm . n = j=1 cj xj של הפרימאלית ושל הדואלית .נוסיף אילוץ i=1 bi yi מתקיים רק עבור הפתרונות האופ'.