Föreläning 3: Fler grafalgorimer Korae vägar mellan alla noder Maximal flöde i graf Bipari machning Korae vägar mellan alla noder Dijkra och Bellman-Ford algorimer beräknar korae avånd från en nod ill alla andra noder. Om man vill beräkna korae avånd mellan alla par av noder kräv mera arbee. En möjlighe är a ara Dijkra algorim n gånger medvarochenavden noderna om arnod. De kräver oal O(n 3 ) operaioner. Om man har negaiva viker kan man använda Bellman-Ford algorim iälle. Då kräv O(n ) operaioner. Floyd-Warhall algorim E mer omyck alernaiv är Floyd-Warhall algorim: Give en graf G = (V,E) med viker w ij på kanerna. Om (v i,v j ) E är w ij =. Beäm korae avånden mellan varje par av hörn i G! Lå d[i, j, k] vara korae avånde mellan v i och v j inkränk ill igar där bara hörnen v 1,...,v k förekommer (uöver v i och v j ). Då är d[i, j, 0] = w ij om i j och d[i, i, 0] = 0. Sedan gäller följande rekurionamband: d[i, j, k] =min{d[i, j, k 1],d[i, k, k 1] + d[k, j, k 1]} för k 1. De korae avånden vi är ue efer varar mo d[i, j, n] där n är anale noder. Följande algorim beräknar alla d-värden: Floyd-Warhall(G = V,E, W ) (1) n dim(w ) (2) for i 1 o n (3) for j 1 o n () d[i, j, 0] w ij (5) for k 1 o n (6) for i 1 o n (7) for j 1 o n (8) d[i, j, k] min(d[i, j, k 1],d[i, k, k 1] + d[k, j, k 1]) (9) reurn d Algorimen arbear i id O( V 3 ). De kan verka om om algorimen på amma id om Bellman-Ford algorim klarar av a beräkna alla avånd. Men lägg märke ill a BF arbear i id O( V E ) vilke för glea grafer är mindre. Negaiva cykler kan hia genom a man ear om d[i, i, k] < 0 för några i, k.
Maximal flöde i graf ViharenrikadgrafG med al c(u, v) definiera för varje par av noder å a 0 c(u, v). Om(u, v) / E måe c(u, v) =0.Viharenkälla och en änka. Exempel: 12 16 20 10 9 7 13 1 Med f(u, v) menar vi e flöde om kicka mellan u och v. För flöde kall följande gälla: 1.f(u, v) c(u, v) för alla u, v 2.f(u, v) = f(v, u) för alla u, v 3. v V f(u, v) =0 för alla u uom, Vi kallar f = v f(, v) för orleken på flöde. Lie noaion: Om X V,Y V å är f(x, Y )= x y f(x, y). Om x, å är f(x, V )=0. Deuom gäller f = f(, V ). De går lä a via a f = f(v,). Bevi: f = f(, V ). FörvarjedelmängdX gäller f(x, X) =0.Vifårf(, V )= f(v,v ) f(v, V )= f(v, V )=f(v,v ) f(v,)+f(v,v ) = f(v,). Hur hiar man maxflöde? Idé (Ford-Fulkeron): Om flöde ine är maximal å hiar vi en ig om de går a öka läng. Öka edan. Men hur hiar man ådana igar? Reidualgraf Give grafen G och e flöde f å äer vi c f (u, v) =c(u, v) f(u, v). " Kapacieen"c f (u, v) är e må på möjligheen a ändra flöde. Även om c(u, v) =0kan c f (u, v) > 0 om f(u, v) < 0. Menc f (u, v) 0 för alla u, v. Vi låer kanerna E f = {(u, v) :c f (u, v) > 0} bilda kanerna i reidualgrafen G f om har kapacieerna c f.
Exempel: Flöde av värde 3 i grafen 5 1 3 7 3 3 ger reflöde 5 1 3 3 Reidualgrafen G f anger hur mycke flöde kan ändra på de olika kanerna. Uökande ig En uökande ig p är en ig i G f.låδ p = min{c f (u, v) där (u, v) är kaner i p}. p f är en ändring i flöde om ge av δ p om(u, v) p p f(u, v) = δ p om(v, u) p 0 annar Vi bildar ny flöde genom a äa f (u, v) =f(u, v) + p f(u, v). Deger f = f + δ p. Ford-Fulkeron algorim Ford-Fulkeron(G = V,E,c) (1) foreach (u, v) E (2) f(u, v) 0 (3) f(v, u) 0 () while de finn väg p ådan a i G f (5) δ min{c f (u, v) :(u, v) p} (6) foreach (u, v) p (7) f(u, v) f(u, v)+δ (8) f(v, u) f(u, v)
Om uökande ig finn är f ine maximal. De omvända gäller : Om de ine finn uökande ig är f maximal. Hur viar man de? Sni E ni är en pariion av V i vå dijunka delar X och Y ådana a X och Y. Kapacieen C(X, Y ) är definierad om x X y Y c(x, y). Vikig olikhe: f C(X, Y ) för alla ni X, Y. Bevi: Vi har f = f(, V )=f(, V )+f(x, V )=f(x, V )=f(x, X)+ f(x, Y )=f(x, Y ).Menf(X, Y )= x y f(x, y) x y c(x, y) =C(X, Y ). Anag a f ine har någon uökande ig. Sä X f = {v å a de finn en ig v i G f }.SäY f = V X f.dåär (X f,y f ) e ni. Om u X f och v Y f och (u, v) E måe f(u, v) =c(u, v). Om (v, u) E måe f(v, u) =0. Vi har därför f = C(X f,y f ) Vi iner ockå a C(X f,y f ) måe vara e ni av minimal orlek. Ford-Fulkeron a: Värde på de maximala flöde i en graf är lika med värde på de minimala nie. Effekivare flödealgorimer De finn grafer för vilka Ford-Fulkeron algorim fungerar dålig: 1000 1000 1000 1000 1 Edmond och Karp hiade följade förbäring: Öka allid flöde läng den korae igen i reidualgrafen (hia med BFS). Hög V E ieraioner behöv. Dea ger idkomplexieen O( V E 2 ) O( V 5 ) eferom uppdaering av flöde ar id O( E ). Den bäa kända algorimen för probleme har idkomplexieen O (min( V 2/3, E 1/2 ) E ) (Goldberg och Rao, 1997). f(n) O (g(n)) om f(n) O(g(n)log k n) för någo k. Machning I en bipai graf G med V = X Y är en machning e urval av kaner å a inga kaner har gemenamma noder. Om m är machningen orlek och m = X har vi en fulländig machning X Y.Omm = X = Y har vi en perfek machning.
En beeckning: Om A X å är Γ(A) Y de noder om är förbundna med noder i A. P. Hall a: De finn en fulländig machning X Y om och enda om A Γ(A) för alla A X. Bevi: Enda om går lä a e. Vi viar de finn en fulländig machning om villkore är uppfyll. Vi anar a A Γ(A) allid gäller. Använd indukion över orleken på X. Om X =1å finn de förå machning. Fall1: A < Γ(A) gäller för alla A X. Väljx 1 X. Γ(x 1 ) > 1. Macha x 1 med någon granne y 1.SäX = X x 1, Y = Y y 1.LåΓ beeckna grannmängder i nya grafen. Lå A X. Villkore A Γ (A ) måe då gälla eferom A < Γ(A ) Enlig indukionanagande kan X macha in i Y. Fall2: De finn A å a A = Γ(A). Enlig indukionen kan A macha med en mängd Y A Y.SäX = X A, Y = Y Y A.LåA X. Vi vill via a A Γ (A ) Vi ve a Γ(A A) A + A. Γ (A A) =Γ(A ) Γ(A). Γ (A ) = Γ(A A) Γ(A) A A A = A. Indukionen viar a X kan macha in i Y. Maximal machning om flödeproblem Probleme a hia en maximal bipari machning (d.v.. maximal anal ingående kaner) kan löa genom a bilda e flödeproblem och edan löa de: Alla kaner har kapacie 1 rikad å höger. Konruera e maxflöde. Sa:Om alla kaner i en graf G har helalkapacieer å kommer maxflödealgorimen a ge e flöde om har helalvärde i alla kaner. I vår graf kommer kanerna a få flöde 0 eller 1. Lå M vara mängden av kaner om har flöde 1. Då kommer M a bilda en maximal machning.