1 Pojcie grafu Def. Graf prosty G=(V,E) jest uporzdkowan par dwóch elementów: zbioru wierzchołków V oraz zbioru krawdzi E V V. Krawd pomidzy wierzchołkami u oraz v oznaczamy {u,v}. Graf prosty nie zawiera krawdzi postaci {u,u} oraz pomidzy kad par wierzchołków istnieje co najwyej jedna krawd. Def. Wierzchołki u i v s ssiednie, gdy {u,v} E(G). Wierzchołek u oraz krawd e s incydentne, gdy u e. Przykład: v 1 v 4 v 2 G = ( { v 1, v 2, v 3, v 4 }, v 3 { {v 1, v 2 }, {v 2, v 3 }, {v 3, v 4 }, {v 4, v 1 },{v 2, v 4 } } ) Uwaga. Rysunek grafu jest reprezentacj zbioru wierzchołków oraz sposobu ich połczenia, wic jego własnoci metryczne nie s istotne.
2 Multigrafy oraz grafy skierowane Def. Multigraf to graf, w którym pomidzy dowoln par wierzchołków moe wystpi wicej ni jedna krawd oraz dopuszczalne s ptle, tzn. krawdzie postaci {v,v}, gdzie v V(G). Def. Graf nazywamy digrafem (grafem skierowanym), gdy krawd łczca u oraz v jest uporzdkowan par postaci (u,v). Przykład: u v u v w G = ( {u, v, w, x}, {{u,v}, {w,v}, {w,w}, {w,x}, {w,x}, {w,x}, {x,v}, {x,v}} ) x w D = ( {u, v, w, x}, {(u,v), (w,v), (v,x), (x,w)} ) x
3 Stopie wierzchołka Def. Stopie wierzchołka v jest oznaczany symbolem deg(v) i jest to ilo wierzchołków ssiednich z v. Dla danego grafu G definiujemy parametry: δ = min { deg(v) : v V(G) } = max { deg(v) : v V(G) } Lemat o uciskach dłoni. Niech G bdzie grafem prostym. Wówczas deg(v 1 ) +... + deg(v n ) = 2m. Dowód: (indukcja ze wzgldu na liczb krawdzi grafu) 1. Jeli m =, to równo jest prawdziwa. 2. Zakładamy, e lemat zachodzi dla pewnego m. 3. Udowodnimy równanie dla m + 1. Niech e E(G) bdzie dowoln krawdzi. Z załoenia indukcyjnego wiadomo, e deg(v 1 ) +... + deg(v n ) = 2m(G e), gdzie deg(v i ) jest stopniem v i w grafie G e. Dla grafu G suma stopni wierzchołków jest o 2 wiksza ni dla G e oraz m(g) = m(g e) + 1, co oznacza, e równanie zachodzi dla grafu G o m + 1 krawdziach.
4 Twierdzenie Havla Tw. Ilo wierzchołków nieparzystego stopnia w grafie prostym jest parzysta. Dowód: Z lematu o uciskach dłoni wiadomo, e deg(v 1 ) +... + deg(v k ) + deg(u 1 ) +... + deg(u l ) = 2m, gdzie v i jest wierzchołkiem o nieparzystym stopni, natomiast u i parzystym. Wiadomo, e suma liczb parzystych deg(u 1 ) +... + deg(u l ) jest liczb parzyst, wic suma deg(v 1 ) +... + deg(v k ) ma równie parzyst warto, co jest spełnione tylko wtedy, gdy ilo składników jest parzysta (k jest parzyste). Def. Cigiem stopniowym grafu nazywamy uporzdkowany nierosnco cig stopni jego wierzchołków. Def. Cig stopniowy jest graficzny, gdy jest on cigiem stopni pewnego grafu. Tw. Havla Cig stopniowy (k,d 1,...,d l ) jest graficzny wtedy i tylko wtedy, gdy po posortowaniu cig (d 1 1,d 2 1,..., d k 1,d k+1,d k+2,...,d l ) jest graficzny.
5 Cigi graficzne Algorytm sprawdzajcy, czy cig stopni jest graficzny: 1. Jeli d 1 =... = d l =, to cig jest graficzny 2. Jeli d 1 <, to cig nie jest graficzny 3. Uporzdkuj cig nierosnco wg stopni 4. Usu z cigu pierwsz (najwiksz) liczb d 1 i odejmij 1 od kolejnych d 1 liczb cigu 5. Wró do punktu 1 Przykład: Sprawdzi, czy podany cig jest graficzny: ( 4, 3, 3, 2, 2 ) ( 2, 2, 1, 1 ) ( 1,, 1 ) ( 1, 1, ) (, ) Odpowied: podany cig stopniowy jest graficzny.
6 Cigi graficzne Przykład Cig (6,5,4,4,3,3,2) nie jest graficzny, poniewa suma stopni odpowiedniego grafu wynosiłaby 27, co nie jest moliwe na podstawie lematu o uciskach dłoni. Cig stopni (3,3,2,2,2) jest graficzny, poniewa jest on cigiem grafów prostych G 1 i G 2 pokazanych poniej. G 1 = G 2 =
7 Przykłady grafów Graf pusty N n =({v 1,...,v n }, ). Graf pełny K n =({v 1,...,v n },{{v i,v j }: i,j=1,...,n, i j}). Graf r-regularny jest grafem, dla którego zachodzi równo r = δ = (tzn. stopie kadego wierzchołka jest równy r). Wówczas m=(r n)/2. Graf 3-regularny nazywamy grafem kubicznym. Zdefiniowany wczeniej graf pełny o n wierzchołkach jest (n 1)-regularny. Graf K 4 Graf kubiczny (graf Petersena)
8 Operacje sumy i zespolenia Def. (suma grafów) G 1 G 2 = ( V(G 1 ) V(G 2 ), E(G 1 ) E(G 2 ) ) Def. (zespolenie grafów) G 1 + G 2 = ( V(G 1 ) V(G 2 ), E(G 1 ) E(G 2 ) {{v 1,v 2 }:v 1 V(G 1 ),v 2 V(G 2 )}) Tw. Jeli G = G 1 +G 2, to n(g) = n(g 1 ) + n(g 2 ), m(g) = m(g 1 ) + m(g 2 ) + n(g 1 ) n(g 2 ). Przykład Zespolenie grafów K 2 i N 3 + =
9 Dopełnienie grafu Def. Jeli G jest grafem prostym, to jego dopełnieniem jest graf G, o tym samym zbiorze wierzchołków oraz dwa wierzchołki s ssiednie w G wtedy i tylko wtedy, gdy nie s ssiednie w G. Uwaga Przykładowe zalenoci: G = G, K K G n = r, s r = N = G n K, r n r 1 K gdzie G r oznacza dowolny graf r regularny., s, G = G =
1 Graf krawdziowy Def. Graf krawdziowy L(G) grafu G to graf, którego wierzchołki odpowiadaj krawdziom G. Dwa wierzchołki s ssiednie w L(G) wtedy i tylko wtedy, gdy odpowiadajce im krawdzie s ssiednie w G. Uwaga Jeli G jest grafem r-regularnym, to L(G) jest 2(r 1)-regularny. Przykład G = L(G) =
11 Pojcie podgrafu Def. Podgrafem grafu G nazywamy dowolny graf H taki, e V(H) V(G) oraz E(H) E(G). Uwaga Podgraf mona otrzyma usuwajc pewn liczb krawdzi i (lub) wierzchołków z grafu G. Jeli e E(G), to przez G e rozumiemy podgraf powstały przez usunicie krawdzi e z grafu G. Jeli F E(G) to G F jest grafem utworzonym z G w wyniku usunicia krawdzi nalecych do zbioru F. Analogicznie, jeli v, S s odpowiednio wierzchołkiem oraz zbiorem wierzchołków grafu G, to G v oraz G S definiujemy jako grafy powstałe poprzez usunicie odpowiednio v lub S z grafu G. Def. Podgraf pełny dowolnego grafu G nazywamy klik. Rozmiar najwikszej kliki oznaczamy przez ω(g).
12 Podgraf indukowany Def. Podgraf indukowany G[S] grafu G, gdzie S V(G), definiujemy nastpujco: G[S] = ( S, {{u,v} : u,v S, {u,v} E(G)} ). Przykład (podgraf indukowany) v 1 v 1 v 6 G = v 5 v2 v 3 v 6 G[{v 1, v 3, v 4, v 6 }] = v 3 v 4 v 1 v 4 Podgraf G, który nie jest podgrafem indukowanym: v 6 v 2 v 4 v 3
13 Drogi i cykle Def. Marszruta to taki cig krawdzi grafu G, e dwie kolejne krawdzie tego cigu s ssiednie w G lub s identyczne. Łacuch jest marszrut, w której adna krawd nie wystpuje dwukrotnie. Droga to marszruta w której kady wierzchołek wystpuje co najwyej raz. Cykl to droga, której wierzchołek pocztkowy jest równy kocowemu. Przykład G = v 1 v marszruta: v 6 v2 1, v 6, v 3, v 6, v 4, v 5 v 5 v 4 v 3 łacuch: v 6, v 1, v 2, v 3, v 6, v 4 droga: v 1, v 2, v 3, v 6, v 4, v 5 cykl: v 1, v 2, v 3, v 6, v 1
14 Drogi i cykle Tw. Jeli δ = 2, to graf G zawiera cykl. Dowód: (a) Mamy m n, gdy z lematu o uciskach dłoni wiadomo, e 2m = deg(v 1 ) +... + deg(v n ) nδ = 2n. (b) Udowodnimy indukcyjnie wzgldem n, e jeli m n, to G zawiera cykl. - Jeli n = 2, to G zawiera cykl. - Zakładamy, e twierdzenie zachodzi dla wszystkich grafów, których rzd nie przekracza n. - Rozwamy n + 1 wierzchołkowy graf G oraz niech e = {u,v} bdzie jego dowoln krawdzi. Jeli G e jest spójny, to istnieje cieka z u do v w G e wic ta cieka w połczeniu z e tworzy cykl w G. Jeli G e nie jest spójny to oznaczmy G e = G 1 G 2. Gdyby zachodziło m(g 1 ) n(g 1 ) 1 oraz m(g 2 ) n(g 2 ) 1, to m(g) = m(g 1 ) + m(g 2 ) + 1 n(g 1 ) + n(g 2 ) 1 = n(g) 1, co daje sprzeczno z załoeniem. Std mona przyj, e m(g 1 ) n(g 1 ) i z załoenia indukcyjnego G 1 (wic równie G) zawiera cykl. (c) Z (a) oraz (b) wynika teza.
15 Grafy dwudzielne Graf dwudzielny G = (V 1 V 2, E), gdzie G[V 1 ] oraz G[V 2 ] s grafami pustymi (istnieje podział V na podzbiory V 1 i V 2 takie, e kada krawd grafu łczy wierzchołki z rónych zbiorów V i ). Szczególnym przypadkiem s pełne grafy dwudzielne K a,b = N a + N b. W takim przypadku zachodz wzory. m(k a,b ) = a b, n(k a,b ) = a + b. V 1 V 2 K 2,3 = Graf dwudzielny (2-regularny)
16 Grafy dwudzielne Tw. Graf G jest dwudzielny wtedy i tylko wtedy, gdy kady cykl w G ma parzyst długo. Dowód: Załómy, e G=(V 1 V 2,E) jest dwudzielny oraz v 1,...,v k jest dowolnym jego cyklem. Bez straty ogólnoci mona załoy, e v 1 V 1. Std, e v 1 i v 2 s ssiednie wynika, e v 2 V 2. Ogólnie, v 2p V 2 oraz v 2p+1 V 1, co oznacza, e wierzchołek v k V 2 poniewa jest ssiedni z v 1. Załómy, e kady cykl w G ma parzyst długo. Definiujemy podział V nastpujco: A v = {w V : d(v,w) jest parzyste}, B v = V\A v, gdzie d(v,w) jest długoci najkrótszej cieki łczcej v z w. Wierzchołki w A v s parami niessiednie, gdy sytuacja x, y A v oraz {x,y} E oznacza, e w G wystpuje nieparzysty cykl o długoci d(v,x) + d(v,y) + 1, sprzeczno. Podobnie mona uzasadnie krawd pomidzy elementami B v implikuje istnienie nieparzystego cyklu w G.
17 Przykłady grafów Cykl C n = ( {v 1,...,v n }, {{v 1,v 2 },...,{v n-1,v n }, {v n,v 1 }} ) C 3 = C 4 = C 5 = Koło W n = ( {v 1,...,v n }, {{v 1,v 2 },...,{v n-1,v n }, {v n,v 1 }} ) W n = C n 1 + N 1 W 4 = W 5 = W 6 =
18 Hiperkostki hiperkostka Q n jest grafem, którego wierzchołki odpowiadaj wszystkim cigom zero-jedynkowym długoci n. Dwa wierzchołki s ssiednie, o ile odpowiadajce im cigi róni si na jednej pozycji. 1 11 1 11 111 11 11 Q 1 Q 23
19 Spójno krawdziowa Def. Graf jest spójny, gdy pomidzy kad par wierzchołków istnieje droga. Zbiór rozspajajcy grafu to zbiór krawdzi, których usunicie rozspaja graf. Rozcicie to zbiór rozspajajcy, którego aden właciwy podzbiór nie rozspaja grafu. Spójno krawdziowa jest moc najmniejszego rozcicia (oznaczenie: λ(g)). Składowa spójnoci grafu G jest podgrafem H takim, e G = H G, dla pewnego G. Krawd e nazywamy mostem, gdy {e} jest rozciciem. Przykład Zbiór rozspajajcy e Rozcicie Most Składowe spójnoci grafu G e
2 Spójno wierzchołkowa Def. Zbiór separujcy grafu to zbiór wierzchołków, których usunicie rozspaja graf. Separator to zbiór separujcy, którego aden właciwy podzbiór nie rozspaja grafu. Spójno wierzchołkowa jest moc najmniejszego separatora (oznaczenie: χ(g)). Wierzchołek v nazywamy przegubem, gdy {v} jest separatorem. Przykład Zbiór separujcy v Separator Przegub Składowe spójnoci grafu G v
21 Spójno grafu Tw. Jeli graf G posiada k składowych spójnoci, to n k m. Dowód: Dowodzimy twierdzenie indukcyjnie wzgldem k. 1) Niech k = 1. Graf ma minimaln ilo krawdzi wówczas, gdy usunicie dowolnej z nich rozspaja graf. Wybierzmy dowolny wierzchołek bdcy liciem i usumy go z grafu wraz z incydentn krawdzi. W wyniku tej operacji liczba krawdzi i wierzchołków malej o 1. Po pewnej liczbie kroków otrzymujemy graf K 2. 2) Zakładamy, e twierdzenie zachodzi dla pewnego k. 3) Dowodzimy dla k + 1. Dodajemy do grafu krawd e tak, aby łczyła dwie składowe spójnoci. Wówczas korzystajc z załoenia indukcyjnego otrzymujemy: n(g+e) (k 1) m(g+e). Po uwzgldnieniu, e n(g+e) = n(g) oraz m(g+e) = m(g) + 1 otrzymujemy tez.
22 Spójno grafu Tw. Jeli graf G posiada k składowych spójnoci, to m (n k)(n k + 1)/2. Dowód: Rozwamy n-wierzchołkowy graf G, o najwikszej moliwej liczbie krawdzi, który posiada k składowych spójnoci G 1,...,G k takich, e V(G i+1 ) V(G i ). Załómy, e wierzchołek u naley do najliczniejszej składowej spójnoci, natomiast v naley do składowej G 2. Zauwamy, e jeli V(G 2 ) > 1, to przeniesienie wierzchołka v z G 2 do G 1 nie zmieni liczby składowych spójnoci, liczba krawdzi natomiast wzronie, co daje sprzeczno. Std V(G i ) = 1 dla i > 1. Std, m(g) = m(k n k ) = (n k)(n k + 1)/2, co koczy dowód. Wniosek Dowolny n-wierzchołkowy graf posiadajcy wicej ni (n 2)(n 1)/2 krawdzi jest spójny.
23 Sprawdzanie spójnoci grafu Procedure Spójny(G) begin S := { v }; (* gdzie v jest dowolnym wierzchołkiem grafu G *) while istnieje nieoznaczony wierzchołek v S do begin S := S N(v); oznacz wierzchołek v; end; if S = V(G) then return graf G jest spójny ; else return graf G nie jest spójny ; end Przykład Oznaczenia: oznaczone elementy S; nieoznaczone elementy S; biecy wierzchołek v; Odp: graf G jest spójny
24 Drzewa Drzewo graf spójny, który nie zawiera podgrafu bdcego cyklem. Dla tej klasy grafów zachodzi m = n 1. Wierzchołek o stopniu równym 1 nazywamy liciem. - cieki: P n = ({v 1,...,v n },{{v 1,v 2 },...,{v n-1,v n }}) - gwiazdy: K 1,n 1 = ({v 1,...,v n },{{v 1,v 2 },...,{v 1,v n }}) = N 1 + N n-1 - kometa graf powstały poprzez połczenie pewnego wierzchołka gwiazdy z liciem nalecym do cieki - gsienica graf, w którym mona wyróni takciek, e kady li w grafie jest ssiedni z pewnym wierzchołkiem cieki - dwugwiazda wszystkie wierzchołki, z wyjtkiem dwóch maj stopie równy 1 - drzewo binarne drzewo, w którym stopie kadego wierzchołka jest równy co najwyej 3
25 Drzewa Tw. Niech T bdzie drzewem o n wierzchołkach. Wówczas nastpujce warunki s równowane: (1) T jest drzewem; (2) T nie zawiera cykli i ma n 1 krawdzi; (3) T jest grafem spójnym i ma n 1 krawdzi; (4) T jest grafem spójnym i kada krawd jest mostem; (5) kade dwa wierzchołki T s połczone dokładnie jedn drog; (6) T nie zawiera cyklu, ale po dodaniu dowolnej krawdzi otrzymany graf ma dokładnie jeden cykl. Dowód: Wykaemy twierdzenie indukcyjnie wzgldem n. Jeli n = 1, to twierdzenie jest prawdziwe. Załómy, e jest prawdziwe równie dla wszystkich drzew T, których rzd jest mniejszy ni n. Nastpnie wykaemy równowano warunków dla drzewa T o n wierzchołkach.
26 Drzewa Dowód (cd.): (1) (2) [T jest drzewem T nie zawiera cykli i ma n 1 krawdzi] T jest drzewem, wic nie zawiera cykli. Po usuniciu dowolnej krawdzi e otrzymujemy T e = T 1 T 2. Z załoenia indukcyjnego mamy m(t i ) = n(t i ) 1, i = 1,2. Std m(t) = n(t 1 ) 1 + n(t 2 ) 1 + 1 = n(t) 1. (2) (3) [T nie zawiera cykli i ma n 1 krawdzi T jest grafem spójnym i ma n 1 krawdzi] Załómy, e T nie jest grafem spójnym. Wtedy T = T 1 T 2. To oznacza, e m(t) = m(t 1 ) + m(t 2 ) = n(t 1 ) + n(t 2 ) 2, na mocy załoenia indukcyjnego. Std m(t) = n(t) 2. Ale z warunku (2) wynika, e m(t) = n(t) 1, co daje sprzeczno.
27 Drzewa Dowód (cd.): (3) (4) [T jest grafem spójnym i ma n 1 krawdzi T jest grafem spójnym i kada krawd jest mostem] Graf T e nie jest spójny, gdy podalimy wczeniej twierdzenie mówice, i dla grafu o k składowych spójnoci zachodzi n k m. W przypadku grafu T e mamy k = 1 oraz m = n 2. (4) (5) [T jest grafem spójnym i kada krawd jest mostem kade dwa wierzchołki T s połczone dokładnie jedn drog] Gdyby pomidzy pewn par wierzchołków istniały dwie drogi, to tworzyłyby one cykl. Usunicie dowolnej krawdzi z tego cyklu nie spowoduje rozspojenia grafu, co przeczy załoeniu, i kada krawd jest mostem.
28 Drzewa Dowód (cd.): (5) (6) [kade dwa wierzchołki T s połczone dokładnie jedn drog T nie zawiera cyklu, ale po dodaniu dowolnej krawdzi otrzymany graf ma dokładnie jeden cykl] Załómy, e graf T zawiera cykl. Wówczas pewne dwa wierzchołki, nalece do tego cyklu, s połczone dwiema rónymi drogami. Sprzeczno. Po operacji dodania krawdzi graf T + {u,v} zawiera cykl, poniewa wierzchołki u oraz v s połczone w grafie T drog. (6) (1) [T nie zawiera cyklu, ale po dodaniu dowolnej krawdzi otrzymany graf ma dokładnie jeden cykl T jest drzewem] Wystarczy wykaza, e graf T jest spójny. Gdyby tak nie było, to T graf T + {u,v} nie zawiera cyklu, gdzie T = T 1 T 2 oraz u V(T 1 ), v V(T 2 ). Sprzeczno.
29 k-drzewa Def. (k-drzewo) k-drzewem jest graf pełny K k. Jeli G jest k-drzewem o n wierzchołkach, to (n+1)-wierzchołkowe k-drzewo powstaje z G poprzez dodanie wierzchołka ssiedniego do wszystkich wierzchołków pewnej kliki w o k wierzchołkach w G. Czciowe k-drzewo to dowolny podgraf k-drzewa. Uwaga Kade drzewo jest 1- drzewem Przykład 2-drzewo 3-drzewo
3 Macierz ssiedztwa Macierz ssiedztwa jest struktur danych słuc do reprezentacji grafów w pamici komputera. Dla danego grafu G okrelamy kwadratow tablic M o wymiarach n n tak, e M[ i, j] =, 1, gdy { v gdy { v i i, v, v j j } E( G) } E( G) Przykład Przykład: ssiedztwo wierzchołka v 6 v 6 v 5 Wierzchołek v 6 jest ssiedni z: v 1 G = M = v 4 v2 v 3 v 1, v 3 i v 4 1 1 1 1 1 1 1 1 1 1 1 1
31 Macierz ssiedztwa Zalety: sprawdzenie, czy {v i,v j } E(G), dodanie oraz usunicie krawdzi to operacje dokonywane w stałym czasie struktura danych łatwa w implementacji Wady: przechowywanie macierzy wymaga O(n 2 ) pamici przejrzenie zbioru krawdzi dokonywane w czasie O(n 2 ) zamiast O(m)
32 Lista ssiedztwa Lista ssiedztwa jest struktur danych, w której wystpuje n- elementowy wektor N zwany nagłówkiem taki, e N[i] jest wskanikiem na list zawierajc ssiadów wierzchołka v i. Przykład: lista ssiadów wierzchołka v 6 Przykład v v 1 v v 6 v2 v G = N = v v v 3 5 v v 4 v 2 1 2 5 4 1 v v v v v 6 3 6 6 3 v 4 Wierzchołek v 6 jest ssiedni z: v 1, v 3 oraz v 4
33 Lista ssiedztwa Zalety: przejrzenie zbioru krawdzi dokonywane w czasie O(m) oszczdno pamici wymagana pami rzdu O(m) Wady: sprawdzenie, czy {v i,v j } E(G) wymaga czasu proporcjonalnego do min{deg(v i ), deg(v j )} usunicie krawdzi {u,v} wymaga czasu proporcjonalnego do max{ deg(u), deg(v) }
34 Izomorfizm grafów Def. Niech bd dane dwa grafy G 1 i G 2 o tej samej liczbie wierzchołków. Powysze grafy s izomorficzne o ile istnieje bijekcja f:v(g 1 ) V(G 2 ) taka, e wierzchołki u i v s ssiednie w grafie G 1 wtedy i tylko wtedy, gdy wierzchołki f(u) i f(v) s ssiednie w G 2. Tw. Jeli grafy G 1 i G 2 s izomorficzne, to 1. V(G 1 ) = V(G 2 ) 2. E(G 1 ) = E(G 2 ) 3. Cigi stopniowe tych grafów s sobie równe Przykład Nastpujce trzy grafy s izomorficzne:
35 Izomorfizm grafów Uwaga. Warunki podane w powyszym twierdzeniu nie s wystarczajce do tego, aby dwa grafy były izomorficzne. Dla poniszych dwóch grafów G 1, G 2 mamy 1. V(G 1 ) = V(G 2 ) 2. E(G 1 ) = E(G 2 ) 3. Cigi stopniowe tych grafów s sobie równe, lecz nie s one izomorficzne. G 1 = G 2 = Uwaga Nie wiadomo, czy istnieje wielomianowy algorytm, stwierdzajcy, czy podane na wejciu dwa grafy s izomorficzne.
36 Izomorfizm grafów Przykład Sze postaci grafu Petersena
37 Szukanie najkrótszych dróg z jednym ródłem
38 Algorytm Dijkstry Załoenia: dany jest spójny graf prosty G z wagami na krawdziach waga w(e) dla kadej krawdzi e jest nieujemna dany jest wyróniony wierzchołek s Wyjcie: dla kadego wierzchołka v algorytm znajduje d[v], długo najkrótszej drogi z wierzchołka s do v. Przez długo drogi rozumiemy sum wag krawdzi nalecych do drogi. Uwaga: Algorytm mona łatwo zmodyfikowa tak, aby oprócz długoci drogi wyznaczał krawdzie do niej nalece oraz tak, aby działał w przypadku grafów skierowanych.
39 Pseudokod Uwaga S jest pomocniczym zbiorem wierzchołków (nazywany zbiorem pewnoci). O wierzchołku v nalecym do S wiadomo, e jego etykieta d[v] jest równa długoci najkrótszej drogi z s do v. Procedure Dijkstra(G, s) begin S := ; d[s] = ; d[ v] = + dla v s; for i := 1 to n do begin znajd v V\S, posiadajcy minimaln etykiet d[ v]; S := S {v}; for kady ssiad u V\S do begin d[ u] := min{d[ u], d[ v] + w({u,v}) }; end end end
4 Przykład s Procedure Dijkstra(G, s) begin S := ; d[s] = ; d[ v] = + dla v s; for i := 1 to n do begin znajd v V\S, o minimalnym d[ v]; S := S {v}; for kady ssiad u V\S do begin d[ u] := min{d[ u], d[ v] + w({u,v}) }; end end end 4 7 4 7 1 3 2 7 6 4 8 2 1 9 2 2 3 8 11 Szukamy długoci najkrótszej drogi z s do t. Elementy zbioru S oznaczamy kolorem czerwonym. Odpowied: najkrótsza droga z s do t ma długo 16. 13 4 16 t 5 11
41 Uwagi o implementacji operacje znajd v V\S, o minimalnym d[ v]; S := S {v}; s wykonywane O(n) razy operacja d[ u] := min{d[ u], d[ v] + w({u,v}) }; jest wykonywana O(m) razy do wydajnej implementacji wykorzystujemy kopiec binarny o tej własnoci, e klucz zapamitany w danym wle jest mniejszy od kluczy jego synów elementami kopca s wierzchołki V\S, a klucze to liczby d[v] w ogólnym przypadku czas budowy kopca to O(nlogn), lecz w algorytmie Dijkstry (wykorzystujc fakt, e inicjalnie wszystkie klucze, z wyjtkiem d[s] s identyczne) czas ten jest liniowy wyszukiwanie wierzchołka w zbiorze V\S o minimalnym kluczu, dziki własnoci kopca, moe by wykonana w czasie stałym usunicie elementu o minimalnym kluczu (czyli instrukcja S := S {v}; ) wymaga czasu O(log( V\S )) = O(logn) operacja d[ u] := min{d[ u], d[ v] + w({u,v}) }; wymaga czasu O(log( V\S )) ostatecznie, czas działania algorytmu Dijkstry to O((n+m)logn)
42 Algorytm Bellmana-Forda Wejcie: obciony spójny digraf G. Dozwolone ujemne wagi na krawdziach. Algorytm stwierdza czy istnieje cykl o ujemnej sumie wag. Jeli taki cykl istnieje, to algorytm zwraca informacj o błdzie Jeli powyszego cyklu nie ma, to algorytm znajduje długoci najkrótszych dróg ze ródła s do wszystkich pozostałych wierzchołków grafu
43 Szkic algorytmu algorytm szuka długoci najkrótszych dróg z wyrónionego wierzchołka s do wszystkich pozostałych wierzchołków grafu długo znalezionej drogi z s do v jest zapamitana jako d[v] inicjalnie d[s] = oraz d[v] = + dla s v główna ptla algorytmu jest wykonywana n 1 razy kady przebieg głównej ptli polega na wykonaniu relaksacji kadej krawdzi relaksacja krawdzi (u,v) jest zmniejszeniem oszacowania d[v] jeli warto dotychczas zapamitana jest wiksza ni d[u] + w((u,v)), gdzie w((u,v)) to waga krawdzi (u,v) po zakoczeniu oblicze w głównej ptli algorytmu nastpuje sprawdzenie czy w digrafie istnieje cykl o ujemnej sumie wag, co jest realizowane poprzez sprawdzenie czy mona dokona relaksacji dowolnej krawdzi jeli relaksacja jest moliwa, to graf zawiera cykl o ujemnej sumie wag, co oznacza, e najkrótszych dróg nie mona obliczy jeli relaksacja nie jest moliwa, to zapamitane wartoci d[v] s szukanymi długociami najkrótszych dróg z s
44 Pseudokod procedure Bellman-Ford( G, w, s ) begin d[s] = ; for each v V(G)\{s} do d[v] = + ; for i := 1 to n 1 do for each (u,v) E(G) do if d[u] + w((u,v)) < d[v] then d[v] := d[u] + w((u,v)); for each (u,v) E(G) do if d[u] + w((u,v)) < d[v] then return false; return true; end
45 Przykład + 1 + 8 1 + 8 1 7 8 3 2 3 + 8 3 2 3 + 8 3 2 3 + 6 2 + 2 + Rys. 1: Sytuacja po inicjalizacji. 6 2 + 2 6 Rys. 2: Sytuacja po wykonaniu ptli dla i = 1 6 2 4 2 6 Rys. 3: Sytuacja po wykonaniu ptli dla i = 2 8 1 7 8 1 7 8 1 7 8 3 2 3 6 8 3 2 3 6 8 3 2 3 5 6 2 4 2 5 Rys. 4: Sytuacja po wykonaniu ptli dla i = 3 6 2 3 2 5 Rys. 5: Sytuacja po wykonaniu ptli dla i = 4 6 2 3 2 5 Rys. 6: Sytuacja po wykonaniu ptli dla i = 5
46 Poprawno Tw Jeli digraf G nie posiada ujemnych cykli osigalnych ze ródła s, to po zakoczeniu algorytmu Bellmana-Forda d[v] jest równe długoci najkrótszej cieki z s do v dla kadego wierzchołka v osigalnego z s. Dowód: niech s=v,...,v k =v bdzie najkrótsz ciek z s do v mamy k < V(G) dowodzimy indukcyjnie, e d[v i ] jest równe długoci najkrótszej cieki z s do v i po i-tym przebiegu drugiej ptli for jeli i=, to własno wynika z faktu, e w fazie inicjalizacji algorytmu podstawiamy d[s]= i równo ta nie ulega zmianie podczas działania algorytmu niech i >. Po dokonaniu relaksacji krawdzi (v i-1,v i ) w i-tym przebiegu ptli liczba d[v i ] przyjmuje warto najkrótszej cieki z s do v i.
47 Poprawno Tw. Jeli digraf G zawiera cykl o ujemnej wadze osigalny z s, to algorytm Bellmana-Forda zwraca warto false. Dowód: niech v,...,v k =v bdzie cyklem o ujemnej sumie wag, tzn. i= 1 1, )) < Gdyby algorytm zwrócił warto true, to dla kadego wierzchołka cyklu mamy d[v i ] d[v i-1 ] + w((v i-1,v i )). Sumujc nierównoci parami otrzymujemy k i= 1 Wartoci pierwszych dwóch sum w powyszym wyraeniu s sobie równe wic co prowadzi do sprzecznoci. i k d[ v ] k i= 1 w(( v i v i k i= 1 w(( d[ v i 1 ] + k i= 1 v i 1, v i )) w(( v i 1, v )) i
48 Obliczanie najkrótszych cieek pomidzy wszystkimi parami wierzchołków
49 Obliczanie najkrótszych cieek metod mnoenia macierzy problem: szukamy długoci najkrótszych cieek pomidzy wszystkimi parami wierzchołków wykorzystanie metody programowania dynamicznego zwizek z problemem mnoenia macierzy pewne optymalizacje
5 Rekurencyjna definicja rozwizania Lemat Jeli v,..., v l jest najkrótsz ciek łczc v z v l, to podcieka v s,...,v t, gdzie s t l jest najkrótszym połczeniem pomidzy wierzchołkami v s i v t. m d ij Oznaczenie: - długo najkrótszej cieki z i do j zawierajcej co najwyej m krawdzi. Wówczas: d m ij = min( d m 1 ij,min{ d m 1 ik + w kj : k = 1,..., n}) i i = j j dla m < n oraz + d ij = i i = j j
51 Algorytm Wejcie: macierz D m współczynników d ij oraz macierz W opisujca wagi w ij Wyjcie: macierz D m+1 m+1 współczynników m d ij procedure SearchShortestPaths( D m, W ) begin for i := 1 to n do for j := 1 to n do begin m+ d 1 m ij = dij ; for k := 1 to n do m+ 1 ij end return D m+1 ; end m+ 1 ij m ik d = min( d, d + w kj );
52 Przykład 8 6 3 1 2 2 2 3 4 5 3 2 6 1 = 2 3 2 2 3 1 6 8 W = 2 2 3 2 2 4 3 1 3 2 1 6 4 7 8 2 D = 2 2 3 2 2 4 2 1 3 5 2 1 5 4 6 7 8 3 D = 2 2 3 2 2 4 2 1 3 5 3 1 5 3 6 7 8 4 D = 2 2 3 2 2 4 2 1 3 5 3 1 5 3 5 7 8 5 D
53 Zwizek z mnoeniem macierzy procedure SearchShortestPaths( D m, W ) begin for i := 1 to n do for j := 1 to n do begin m+ 1 d ij = +; for k := 1 to n do m+ 1 ij end return D m+1 ; end m+ 1 ij m ik d = min( d, d + w kj ); procedure MatrixMultiplication( A, B ) begin for i := 1 to n do for j := 1 to n do begin c ij := ; for k := 1 to n do c ij := c ij + a ik b kj ; end return C; end Std notacja: D m+1 = D m W
54 Optymalizacje Uwagi: (n 1)-krotne wykonanie mnoenia wg. schematu D n 1 = (... (((D W) W) W)... ) W powoduje, e czas działania algorytmu wynosi O(n 4 ) Z punktu widzenia kocowego rozwizania istotna jest tylko macierz D n 1 Zwikszenie wydajnoci algorytmu uzyskuje si poprzez rezygnacj z obliczania wikszoci macierzy porednich D k Sposób postpowania: log( n zamierzamy obliczy macierz o numerze k = 2 1), która stanowi poprawne rozwizanie, gdy D k = D n 1 dla kadego k > n 1 wykonujemy k razy podnoszenie macierzy do kwadratu obliczajc tylko macierze o indeksach bdcych potgami 2: D 1 = W, D 2 = D 1 D 1, D 4 = D 2 D 2,..., D czas działania takiego algorytmu to O(n 3 logn) k 2 = D k 1 2 D k 1 2
55 Algorytm Johnsona algorytm znajduje najkrótsze cieki pomidzy wszystkimi parami wierzchołków algorytmy Dijkstry oraz Bellmana-Forda s wykorzystywane jako podprogramy asymptotyczny czas działania to O(n 2 logn + nm), gdzie n i m to odpowiednio liczba wierzchołków oraz krawdzi grafu
56 Zmiana funkcji wagowej Uwaga Algorytm wywołuje algorytm Dijkstry dla kadego wierzchołka. Graf wejciowy moe zawiera krawdzie o ujemnych wagach. Aby algorytm działał poprawnie modyfikowana jest funkcja wagowa w. Nowa funkcja wagowa w musi spełnia ponisze własnoci: 1. cieka P jest najkrótszym połczeniem pomidzy wierzchołkami u,v przy funkcji wagowej w wtedy i tylko wtedy, gdy P jest najkrótsz ciek pomidzy u i v z funkcj wagow w 2. w (e) dla kadej krawdzi e Def. w ((u,v)) = w((u,v)) + h(u) h(v) Lemat Jeli P jest ciek złoon z v,...,v k, to w (P) = w(p)+h(v ) h(v k ) k k Dowód: w (' P) = w (' vi 1, vi ) = ( w( vi 1, vi ) + h( vi 1) h( vi )) = 1k 1 = w( vi 1, vi ) + h( v) h( vk ) = w( P) + h( v) h( vk ) 1
57 Zmiana funkcji wagowej Lemat cieka P zawierajca wierzchołki v,...,v k, jest najkrótsz drog z v do v k, przy funkcji wagowej w wtedy i tylko wtedy, gdy P jest najkrótsz ciek z v do v k, przy f-cji wagowej w. Dowód: () (implikacj przeciwn dowodzi si analogicznie) Dowodzimy implikacj metod nie wprost. Załómy, e istnieje inna cieka P taka, e w (P ) < w (P). Korzystajc z poprzedniego lematu w(p )+h(v ) h(v k ) = w (P ) < w (P) = w(p)+h(v ) h(v k ). To oznacza, e w(p ) < w(p) i prowadzi do sprzecznoci. Lemat Graf G ma ujemny cykl przy funkcji wagowej w wtedy i tylko wtedy, gdy ma ujemny cykl przy funkcji w. Dowód: Niech C bdzie dowolnym cyklem w G zawierajcym wierzchołki v,...,v k =v. Wówczas: w (C) = w(c) + h(v ) h(v k ) = w (C), co koczy dowód.
58 Konstrukcja funkcji h Uwaga Celem jest dobranie takiej funkcji h, aby w (e) dla kadej krawdzi e. W tym celu tworzymy nowy graf G powstały z G poprzez dodanie wierzchołka s, z którego wychodzi łuk o wadze do kadego innego wierzchołka grafu G. Uwagi: G nie ma cykli o ujemnych wagach G nie ma cykli o ujemnych wagach definiujemy, dla kadego wierzchołka v h(v) = d(v) długo najkrótszej cieki z s do v Własno: h(v) h(u) + w((u,v)) dla wszystkich krawdzi (u,v) Definiujemy: w ((u,v)) = w((u,v)) + h(u) h(v) s
59 Przykład b 1 c 1 1 1 a 8 3 2 3 d 8 3 2 3 3 8 5 3 6 f 2 e 2 6 3 2 5 2 9 3 3 1 5 5 3 s Rys. 1: Utworzenie grafu G poprzez dodanie wierzchołka s. Rys. 2: Wyznaczenie długoci najkrótszych cieek z s do pozostałych wierzchołków za pomoc alg. Bellmana-Forda. Rys. 3: Utworzenie funkcji wagowej w dla grafu G wg wzoru: w ((u,v)) = w((u,v)) + d(u) d(v).
6 Algorytm Johnsona procedure Johnson( G ) begin wyznacz graf G ; if Bellamn-Ford( G, w, s ) = false then return false; else begin for each v V(G ) do h(v) := d(v); /* obliczone w algorytmie Bellmana-Forda */ for each (u,v) E(G ) do w ((u,v)) := w((u,v)) + h(u) h(v); for each v V(G) do Dijkstra( G, w, v ); for each u V(G) do d[u,v] := [dł. najkr. cieki z v do u w G ] + h(v) h(u); end end
61 Przykład c.d. 8 8 5 8 8 3 9 8 8 1 3 5 3 + Wyznaczylimy wczenie funkcj pomocnicz h: a b c d e f s h 1 3 5 3 Skonstruujemy jeden wiersz tablicy wyjciowej, mianowicie d[a,*], co odpowiada wykonaniu jednego obiegu odpowiedniej ptli alg. Johnsona: wierzchołek a kolor czerwony niebieskie etykiety najkrótsza droga z wierzchołka a obliczone wartoci dla grafu G : a a b 8 c 8 po przekształceniu odwrotnym wynik dla G: a a b 8 c 7 d 8 d 5 e 8 e 3 f 8 f 5 s
62 Grafy hamiltonowskie, problem komiwojaera algorytm optymalny
63 Grafy hamiltonowskie Def. Cykl (droga) Hamiltona jest to cykl (droga), w którym kady wierzchołek grafu wystpuje dokładnie raz. Graf jest hamiltonowski (półhamiltonowski), o ile posiada cykl (drog) Hamiltona. Przykład Graf hamiltonowski Graf półhamiltonowski Graf nie jest ani hamiltonowski ani półhamiltonowski
64 Grafy hamiltonowskie Tw. (Ore, 196) Jeli G jest grafem prostym o n 3 wierzchołkach i deg(u) + deg(v) n dla kadej pary niessiednich wierzchołków u i v, to graf G jest hamiltonowski. Dowód: Załómy, e istnieje graf G o podanych załoeniach ale nie jest hamiltonowski. Moemy załoy, e G posiada drog Hamiltona v 1 v 2... v n oraz {v 1,v n } E(G). Std wynika, e deg(v 1 ) + deg(v n ) n a to oznacza, e istnieje indeks i taki, e {v 1,v i } E(G) oraz {v i-1, v n } E(G), co pokazano na rysunku. To prowadzi do sprzecznoci, gdy v 1 v 2... v i-1 v n v n-1... v i v 1 jest cyklem Hamiltona. v 1 v 2 v 3 v i-1 v i v n-2 v n-1 v n
65 Grafy hamiltonowskie Wniosek (Dirac, 1952) Jeli G jest grafem prostym o n 3 wierzchołkach i deg(u) n/2 dla kadego wierzchołka v, to G jest hamiltonowski. Dowód: Wynika z poprzedniego twierdzenia, gdy deg(u) + deg(v) n dla kadej pary (równie niessiednich) wierzchołków. Uwaga Problem polegajcy na stwierdzeniu czy dany graf G jest hamiltonowski jest NP-zupełny. Oznacza to, e nie s znane efektywne (działajce w czasie wielomianowym) algorytmy rozwizujce ten problem. Nie jest równie znane twierdzenie podajce warunki konieczne i dostateczne na to, aby G był hamiltonowski.
66 Problem komiwojaera Dany jest zbiór miast. Komiwojaer chce odwiedzi wszystkie miasta (kade dokładnie raz) i powróci do punktu wyjcia. Problem polega na znalezieniu najkrótszej trasy o tej własnoci. Zdefiniujemy powyszy problem w jzyku teorii grafów. Niech bdzie dany graf pełny G. Zakładamy, e z kad krawdzi e i jest skojarzona jej waga (długo) oznaczana dalej przez w i. Rozwizaniem problemu komiwojaera jest taki cykl Hamiltona, którego suma wag krawdzi jest minimalna. Przykład 2 7 8 3 6 8 4 6 5 Σ = 26 9
67 Problem komiwojaera Uwagi problem komiwojaera jest NP-trudny, co oznacza, e nie s znane algorytmy o wielomianowej złoonoci obliczeniowej rozwizujce ten problem (przypuszczalnie takie nie istniej) w praktyce jestemy zmuszeni posługiwa si wielomianowymi algorytmami przyblionymi, tzn. takimi, które szybko znajduj rozwizanie, które jest w przyblieniu równe optymalnemu Przykład Jednym z moliwych algorytmów dokładnych jest sprawdzenie wszystkich moliwych cykli Hamiltona i wybranie najkrótszego. Wad takiego podejcia jest to, e liczba cykli jest zbyt dua, gdy dla n-wierzchołkowego grafu wynosi (n!)/2. Std, jeli dysponujemy komputerem sprawdzajcym milion permutacji na sekund, to: n = 1 ilo cykli = (1!)/2 = 18144 czas oblicze = 1.8 s n = 2 ilo cykli = (2!)/2 1 18 czas oblicze 4 tys. lat
68 Historia problemu komiwojaera George Dantzig, Ray Fulkerson i Selmer Johnson (1954) zaprezentowali optymalne rozwizanie problemu komiwojaera dla 49 amerykaskich miast.
69 Historia problemu komiwojaera Padberg i Rinaldi (1987) obliczyli optymalne rozwizanie dla 532 punktów
7 Historia problemu komiwojaera Rozwizanie obejmujce 13549 miast amerykaskich, uzyskane w 1998 roku.
71 Problem komiwojaera algorytm optymalny nie jest znany aden wielomianowy optymalny algorytm dla tego problemu i jest mało prawdopodobne, e taki algorytm w ogóle istnieje omówiony dalej algorytm polega na przeszukiwaniu całej przestrzeni rozwiza podczas oblicze na bieco uaktualniane jest dolne oszacowanie na długo optymalnej trasy, dziki czemu wiemy, których rozwiza czciowych na pewno nie da si rozszerzy na rozwizania optymalne i cz oblicze mona pomin rozwaamy przypadek nieco ogólniejszy, w którym dany jest na wejciu obciony graf skierowany
72 Drzewo przeszukiwa Def. Drzewo przeszukiwa definiujemy jako zakorzenione drzewo, którego kady wierzchołek odpowiada pewnemu podzbiorowi rozwiza. Podzbiory rozwiza odpowiadajce synom wzła wynikaj za sposobu podziału zbioru rozwiza ojca. Uwaga: Dla problemu komiwojaera przyjmujemy nastpujc posta drzewa przeszukiwa: kady wierzchołek odpowiada rozwizaniom problemu, które zawieraj pewne łuki i jednoczenie innych wybranych łuków nie zawieraj (np. pewnemu wierzchołkowi odpowiadaj optymalne trasy zawierajce łuki (a,b),(e,h) oraz nie zawierajce łuków (a,d),(d,e) i (b,e) ) Kady wzeł ma dwóch synów. Po wybraniu nowego łuku e, jeden z synów odpowiada rozwizaniom o ograniczeniach nałoonych w ojcu oraz zawierajcych e, natomiast drugi nie zawierajcych e.
73 Oszacowanie dolne Uwaga: Podczas realizacji algorytmu (tzn. podczas trawersowania drzewa przeszukiwa) pamitamy warto najlepszego znalezionego dotychczas rozwizania. Oznaczmy j przez min_sol. Uwaga: Z kadym wierzchołkiem v drzewa przeszukiwa jest zwizana zmienna LB. Jest to liczba, która stanowi oszacowanie dolne na warto kadego rozwizania nalecego do tego wierzchołka. Wówczas: jeli LB > min_sol, to wiemy, e nie warto przeszukiwa poddrzewa zakorzenionego w wierzchołku v, jeli LB = min_sol, to poddrzewo by moe zawiera rozwizania dorównujce dotychczasowemu najlepszemu. Jeli zadanie polega na wyznaczeniu dowolnego rozwizania optymalnego, to nie przeszukujemy poddrzewa zakorzenionego w wierzchołku v jeli LB < min_sol, to naley przeszukiwa poddrzewo zakorzenione w v (by moe nie całe).
74 Redukcja macierzy Lemat Jeli M jest macierz ssiedztwa grafu G, to: do dowolnego cyklu Hamiltona naley dokładnie jeden element z kadego wiersza M i dokładnie jeden z kadej kolumny jeli od wszystkich elementów w wybranym wierszu (kolumnie) odejmiemy stał d, to długo kadego cyklu Hamiltona jest o d mniejsza od długoci tego samego cyklu, lecz przed odjciem stałej jeli od wierszy i kolumn wielokrotnie odejmiemy stałe tak,aby kady wiersz i kolumna zawierały dokładnie jedno zero, to suma odjtych liczb stanowi dolne oszacowanie optymalnego rozwizania. Def. Proces odejmowania stałych od wierszy (kolumn) macierzy ssiedztwa nazywamy redukcj. Wniosek Jeli łuk (i,j) naley do optymalnej trasy komiwojaera znalezionej na podstawie zredukowanej macierzy ssiedztwa, to (i,j) naley rownie do optymalnej trasy w wyjciowym grafie.
75 Algorytm redukcji procedure Reduce( M ) begin r := ; for i := 1 to n do begin min_row := najmniejszy element w i-tym wierszu; if ( min_row > ) then begin odejmij min_row od kadego elementu w wierszu i; r := r + min_row; end end; for i := 1 to n do begin min_col := najmniejszy element w i-tej kolumnie; if ( min_col > ) then begin odejmij min_col od kadego elementu w wierszu i; r := r + min_col; end end; return r; end Zmienne: M macierz ssiedztwa rozmiaru n r suma odjtych wartoci od wierszy i kolumn (jak wynika z poprzedniego lematu, jest to dolne oszacowanie na długo cyklu w M)
76 Przykład redukcji M = a b c d e a 17 24 13 42 b 11 33 19 28 c 16 44 41 25 d 28 31 6 36 e 42 27 15 21 a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 e 31 1 9 8 11 17 6 13 25 r = 11 + 17 + 6 + 13 + 25 + 8 = 8 Std, do wartoci LB potomków wzła dodamy 8 a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 e 23 2 1 8
77 Kryterium wyboru łuku procedurefindedge( M, r, c ) begin max := 1; for i := 1 to n do for j := 1 to n do if M[i,j] = then begin min_r := warto najmniejszego elementu w wierszu i z pominiciem M[i,j]; min_c := warto najmniejszego elementu w kolumnie j z pominiciem M[i,j]; if min_r + min_c > max then begin max := min_r + min_c; (r,c) := (i,j); end end; return max; end Zmienne: M macierz ssiedztwa n rozmiar M (r,c) łuk do podziału zbioru rozwiza Uwaga: Aby utworzy potomków w drzewie przeszukiwa, wybieramy taki łuk, który powoduje najwikszy wzrost dolnego oszacowania w prawym poddrzewie. Warto, o któr wzronie LB wyznaczamy w zmiennej max.
78 Wybór łuku - przykład min_r+min_c=5+3=8 2+=2 Zredukow. M += = a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 e 23 2 1 1+11=12 +1=1 3+5=8 do podziału zbioru rozwiza wybieramy łuk (c,d) lewy potomek odpowiada wszystkim rozwizaniom (cyklom) zawierajcym łuk (c,d) prawy potomek zawiera wszystkie rozwizania bez (c,d)
79 Tworzenie lewego syna 1. załómy, e wybrano łuk (c,d) w celu utworzenia potomków wierzchołka v, 2. lewy syn zawiera wówczas zbiór rozwiza o tych samych ograniczeniach, co w przypadku v oraz dodatkowo zawierajcych łuk (c,d), 3. oznacza to, e moemy zmniejszy rozmiar macierzy ssiedztwa o 1 poprzez usunicie c-tego wiersza i d-tej kolumny, 4. kolejne uproszczenie macierzy polega na zablokowaniu łuku (d,c) tzn. element macierzy na przeciciu d-tego wiersza i c-tej kolumny przyjmuje warto nieskoczono, 5. blokujemy równie łuk, który tworzy cykl wraz z łukami dodanymi poprzednio do rozwizania, 6. warto LB wyliczamy dodajc do wartoci LB ojca liczb r wyliczon w procedurze Reduce
8 Lewy syn - przykład Dla wzła wyjciowego v (tutaj korze drzewa) LB(v)= Zredukow. M = a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 e 23 2 1 (usunicie wiersza c i kolumny d) a b d e a 17 b 6 5 c 5 27 28 e 23 2 (zablokowanie łuku (d,c)) Warto oszacowania dolnego LB(v l ) dla lewego potomka wynosi zatem LB(v)+r = +8 a b d e a 17 b 6 5 c 5 27 e 23 2 (blokowanie łuków tworzcych cykl z dotychczas wybranymi ) a b d e a 17 b 6 5 c 5 27 e 23 2
81 Tworzenie prawego syna 1. załómy, e wybrano łuk (c,d) w celu utworzenia potomków wierzchołka v, 2. prawy syn zawiera wówczas zbiór rozwiza o tych samych ograniczeniach, co w przypadku v oraz dodatkowo nie zawierajcych łuku (c,d), 3. blokujemy wic łuk (c,d) poprzez wpisanie wartoci nieskoczono na przeciciu c-tego wiersza i d-tej kolumny w macierzy ssiedztwa 4. nie nastpuje zmniejszenie rzdu macierzy ssiedztwa w tym przypadku 5. warto LB wyliczamy dodajc do wartoci LB ojca liczb r wyliczon w procedurze Reduce oraz warto warto max wyliczon w procedurze FindEdge
82 Prawy syn - przykład Dla wzła wyjciowego r (tutaj korze drzewa) LB(r)= Zredukow. M = a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 (zablokowanie łuku (c,d)) e 23 2 1 Warto oszacowania dolnego LB(r p ) dla prawego potomka wynosi zatem LB(r) + r + max = + 8 + 12 = 92 a b c d e a 18 17 b 27 6 3 c 5 27 28 d 17 14 11 e 23 2 1
83 Warunki koca rekurencji Przypadek 1: warto LB w wierzchołku v jest wiksza lub równa od najlepszego znalezionego dotychczas rozwizania. Wówczas drzewo zakorzenione w v nie jest przeszukiwane. Przypadek 2: M jest stopnia 2. Ma ona wówczas jedn z dwóch postaci: + + M = lub M =. + + Zatem bez wzgldu na posta macierzy nie ma wyboru co do tego jakie łuki naley włczy do kocowego rozwizania. Jeli kolumny odpowiadaj wierzchołkom w,x natomiast wiersze u,v to: jeli M[u,w] =, to do cyklu komiwojaera nale łuki (u,w), (v,x) jeli M[u,x] =, to do cyklu komiwojaera nale łuki (v,w), (u,x)
84 Algorytm procedure TraverseTree( M, C, LB ) begin r := Reduce( M ); if LB + r < min_sol then if C = n 2 then begin dołcz dwa łuki do C i uaktualnij min_sol oraz zapamitaj nowe rozwizanie jeli jest lepsze od dotychczasowych; end else begin max := FindEdge( M, c,d ); TraverseTree( M *, C {(c,d)}, LB + r ); if LB + r + max < min_sol then begin M[c,d] := +; TraverseTree(M,C, LB + r ); M[r,c] := ; end end; odtwórz macierz M do postaci sprzed redukcji; end Zmienne: M macierz ssiedztwa C krawdzie nalece do cyklu LB warto dolnego oszacowania dla danego wzła M * powstaje z M poprzez usunicie c-tego wiersza, d-tej kolumny i zablokowania łuku (d,c) i łuków tworzych cykle z C {(c,d)} min_sol inicjalnie równe +
85 Przykład M = a b c d e a 9 22 17 23 b 42 13 21 24 c 6 29 14 31 d 28 35 29 5 e 35 38 34 2 LB= r = 35 max=34 LB=35 r = 35 max=5 LB=7 r = LB=35 r = max=41 c e c d e b min_sol =7 b c d e b (d,e) d a b 15 19 18 19 d (b,a) e 5 d 26 16 e 29 21 LB+r+max = 35+35+5=75> min_sol=7 (a,c) 35++41 > min_sol LB=69 r = 34 max=23 a b c d e a 9 15 18 b 14 19 19 69+34 > min_sol c 8 14 d 26 16 e 7 29 21 69+34+23> min_sol M macierz wyjciowa (przed redukcj), natomiast we wszystkich potomkach pokazano macierze po redukcji
86 Złoono Czas działania procedury Reduce wynosi O(n 2 ) Czas działania procedury FindEdge wynosi O(n 3 ) Zapamitanie i odtworzenie macierzy to operacja rzdu O(n 2 ) Zapamitywanie nowego najlepszego rozwizania w czasie O(n) Oznacza to, e realizacja algorytmu TraverseTree w obrbie jednego wzła wymaga czasu O(n 3 ) Złoono całego algorytmu mona oszacowa zatem przez O(f(n)n 3 ), gdzie f(n) jest liczb wzłów drzewa poszukiwa odwiedzanych przez procedur TraverseTree. Liczba wykonanych oblicze zaley od konkretnych danych wejciowych i w pesymistycznym przypadku jest wykładnicza.
87 Heurystyki dla (symetrycznego) problemu komiwojaera Algorytm włczania Heurystyki lokalnych poszukiwa
88 Algorytm włczania Uwaga Rozwaamy problem komiwojaera dla obcionych grafów prostych Szkic algorytmu: wybierz dowolny wierzchołek v grafu jako pocztkowy wierzchołek cyklu załómy, e został wyznaczony fragment cyklu zawierajcy wierzchołki v,...,v k. W celu rozszerzenia takiego czciowego rozwizania na (k+1)- elementowy fragment cyklu wykonywane s dwa kroki: - krok wyboru: wybierz wierzchołek v sporód wierzchołków nie nalecych do cyklu - krok włczania: okrel miejsce w dotychczas utworzonym fragmencie cyklu, w które naley wstawi wierzchołek v
89 Kryteria wyboru Przykładowe kryteria stosowane podczas kroku wyboru to: wybór losowego wierzchołka sporód wierzchołków nie włczonych jeszcze do cyklu wierzchołek lecy najbliej dotychczas zdefiniowanego fragmentu cyklu dla kadego wierzchołka wyznaczy koszt jego włczenia do cyklu w najbardziej korzystnym dla niego miejscu i wybra wierzchołek o minimalnym koszcie wybór wierzchołka znajdujcego si najdalej od cyklu Uwagi: brak teoretycznych analiz porównujcych powysze podejcia testy komputerowe wskazuj, e włczanie najdalszego wierzchołka okazuje si by technik najskuteczniejsz w praktyce
9 Algorytm włczania 1) krok wyboru: w celu zwikszenia efektywnoci wykorzystujemy tablic d[1,...,n] tak, e d[i] jest najkrótsz drog z wierzchołka v i do fragmentu dotychczas utworzonego cyklu w kroku wyboru wybieramy wierzchołek v, któremu odpowiada najwiksza warto w tablicy d uaktualnienie tablicy d: dla kadego u, d[u] = min{d[u],w({u,v})} 2) krok włczania: obliczamy długo kadego z nastpujcych czciowych rozwiza: v v, v v, v, v 1, v, v,..., v..., v..., v wybieramy rozwizanie czciowe o najmniejszym koszcie 1 2 k, v k k
91 Pseudokod algorytmu procedure FSTP( G, n ); begin V(C) := {u}; E(C) := {{u,u}}; len := ; for each v u do d[v] := w({u,v}); while V(C) V(G) do begin v wierzchołek o najwikszej wartoci d sporód V(G)\V(C); min := +; for each {x,y} E(C) do if w({x,v}) + w({v,y}) w({x,y}) < min then begin min := w({x,v}) + w({v,y}) w({x,y}); {x,y } := {x,y}; end; for each z V(G)\V(C) do d[z] := min{d[z], w({v,z}); len := len + w({x,v}) + w({v,y }) w({x,y }); end end Zmienne: G obciony graf prosty n rzd grafu G u dowolny wierzchołek grafu G len długo znalezionego cyklu
92 Przykład M = a b c d e a 11 16 28 42 b 11 44 31 27 a c 16 44 6 15 d 28 31 6 21 e 42 27 15 21 a a 42 28 e d 21 21 e len = 91 a b c d e 3) len = 91 d = [ 11 6 ] d len = 91 a 28 d 21 e 27 b len = 87 1) len = d = a a b c d [ 11 16 28 42] 42 a 2) len = 84 d = [ 11 15 21 ] b e c d e e a 28 d 31 b 27 e len = 128 a 11 b 31 d 21 e len = 15 4) len = 87 d = [ 6 ] a b c d e
93 Przykład c.d. M = a b c d e a 11 16 28 42 b 11 44 31 27 c 16 44 6 15 d 28 31 6 21 e 42 27 15 21 a 28 d 21 e 27 b a 28 d 21 e 15 c a 28 d 6 c 15 e 44 c len = 136 44 b len = 119 27 b len = 87 a 28 d 21 e 27 b 4) len = 87 d = [ 6 ] a b c d e a 16 c 6 d 21 e Ostatecznie: len = 81 27 b len = 81
94 Heurystyki lokalnych poszukiwa algorytmy r-optymalne
95 Algorytm 2-opt Załómy, e mamy pewien cykl komiwojaera C dla grafu G złoony z krawdzi e 1,...,e n wybieramy dwie krawdzie e i, e j, które nie s ssiednie oznaczmy e i ={u,v} oraz e j ={w,x} cykl C przekształcamy w cykl C w taki sposób, e C = (C\{e i,e j }) {{u,w}, {v,x}}, gdzie wierzchołki u,w nale do rónych składowych podgrafu C\{e i,e j } u v u v x w x w
96 Algorytm 2-opt przy oznaczeniach z poprzedniego slajdu moemy napisa, e koszt nowego cyklu C wynosi w(c ) = w(c) w({u,v}) w({w,x}) + w({u,w}) + w({v,x}) zatem, jeli w({u,v}) + w({w,x}) > w({u,w}) + w({v,x}), to nowe rozwizanie jest lepsze od dotychczasowego w celu wyznaczenia cyklu C algorytm szuka takiej pary krawdzi e i,e j, aby maksymalnie obniy koszt nowego biecego rozwizania jeli zmniejszenie wagi cyklu C nie jest moliwe, to C jest rozwizaniem 2-optymalnym i algorytm koczy działanie powysza procedura przekształcania biecego cyklu C jest powtarzana dopóki moliwa jest redukcja wagi cyklu dziki opisanej wczeniej wymianie krawdzi
97 Dana jest macierz ssiedztwa M oraz biecym cyklem jest C = {{a,b}, {b,c}, {c,d}, {d,e}, {e,a}}. Mamy w(c)=124. Szukamy biecego cyklu dla kolejnej iteracji algorytmu: Przykład M = a b c d e a 11 16 28 42 b 11 44 31 27 c 16 44 6 15 d 28 31 6 21 e 42 27 15 21 a a a a a e b e b e b e b e b d c w(c ) = 147 d c w(c ) = 154 d w(c ) = 81 c d c w(c ) = 15 d c w(c ) = 119 Zatem biecy cykl dla kolejnej iteracji zawiera kraw. {a,b},{b,e},{d,e},{c,d},{a,c}.
98 Algorytm 3-opt algorytm 3-optymalny jest uogólnieniem algorytmu 2-optymalnego w danej iteracji usuwane s trzy krawdzie x,y,z z cyklu C nastpnie do cyklu dodawane s trzy krawdzie e 1, e 2, e 3 w taki sposób, aby graf C =(C\{x,y,z}) {e 1, e 2, e 3 } tworzył cykl istnieje wiele moliwoci wyboru krawdzi e 1, e 2, e 3 algorytm zmiany biecego cyklu mona opisa nastpujco: d := +; dla kadej moliwej trójki krawdzi x,y,z nalecej do C: dla wszystkich e 1, e 2, e 3 t.. (C\{x,y,z}) {e 1, e 2, e 3 } tworzy cykl: jeli w((c {x,y,z}) {e 1, e 2, e 3 }) < d to d := w((c\{x,y,z}) {e 1, e 2, e 3 }); jeli w(c) > d to utwórz nowy biecy cykl C; (*) algorytm koczy działanie, gdy warunek (*) jest fałszywy jeli w-k (*) jest spełniony, to podane kroki s powtarzane dla nowego cyklu
99 8 moliwoci uzupełnienia zbioru C\{x,y,z} do cyklu x z y
1 Algorytm r-opt w kadej iteracji usuwamy r łuków (ich zbiór oznaczmy przez A) z biecego cyklu C do zbioru dróg C A dodajemy r łuków (zbiór dodanych łuków oznaczmy przez B w kadej iteracji badamy wszystkie dopuszczalne zbiory A i B i wybieramy takie rozwizanie, e w((c\a) B) jest minimalne przez dopuszczalne zbiory rozumiemy takie, e (C\A) B jest cyklem Uwaga Rozwizanie r-opt jest równie rozwizaniem (r 1)-optymalnym.
11 Efektywno liczba moliwych wyborów krawdzi A wynosi O( n!/( r!( n r)!)) 1 zbiór C\A mona uzupełni do cyklu na O(2 r ( r 1)!) sposobów złoono całego algorytmu wynosi zatem r 1 n O( p( n)2 ( r 1)! ) r Uwagi: w praktyce algorytm 3-opt okazuje si duo lepszy ni 2-opt, jednak algorytm 4-opt nie jest znaczco lepszy ni 3-opt wynik kocowy zaley od wyboru cyklu pocztkowego nie jest prawd, e lepszy cykl pocztkowy prowadzi do znalezienia lepszego rozwizania, jednak testy komputerowe wskazuj, e warto wybiera jako punkt startowy dla algorytmu cykl o moliwie małej wadze
12 Drzewa spinajce podstawowe definicje minimalne drzewa spinajce: algorytm Prima algorytm Kruskala
13 Drzewa spinajce Def. Niech G bdzie grafem spójnym o n wierzchołkach. Drzewo spinajce grafu G to dowolny jego n-wierzchołkowy acykliczny podgraf. Jeli G jest niespójny, to powyszy podgraf nazywamy lasem spinajcym. Def. Liczba cyklomatyczna grafu G to liczba krawdzi, których usunicie z G prowadzi do utworzenia drzewa (lasu) spinajcego i jest oznaczana symbolem γ(g). Przykłady γ(t) =, T drzewo, γ(l) =, L las, γ(u) = 1, U graf jednocykliczny, γ(k n ) = n (n 1)/2 n + 1, γ(w n ) = n 1.
14 Drzewa spinajce Tw. Dla dowolnego grafu G o k składowych spójnoci zachodzi γ(g) = m n + k. Dowód: Rozwamy najpierw przypadek, gdy G jest spójny. Wiadomo, e n wierzchołkowe drzewo ma n 1 krawdzi. Aby w grafie G znale podgraf bdcy drzewem spinajcym, usuwamy wszystkie krawdzie, z wyjtkiem tych n 1, co oznacza, e musimy usun m n + 1 krawdzi. Załómy teraz, e G nie jest spójny. Wówczas G = G 1... G k, dla pewnego k > 1. Moemy załoy, e kady podgraf G i jest spójny. Udowodnilimy powyej, e γ(g i ) = m i n i + 1, dla kadego i = 1,...,k, gdzie n i = V(G i ), m i = E(G i ). Dodajc równania stronami otrzymujemy: γ(g 1 ) +... + γ(g k ) = (m 1 +... + m k ) (n 1 +... + n k ) + k = m n + k, co koczy dowód, gdy γ(g) = γ(g 1 ) +... + γ(g k ).
15 Baza cykli Def Niech T bdzie lasem spinajcym grafu G. Fundamentalny zbiór cykli (baza cykli) jest to zbiór γ(g) rónych cykli grafu G taki, e kady cykl do niego nalecy powstał przez dodanie pewnej krawdzi ze zbioru E(G)\E(T). Przykład Dwa fundamentalne zbiory cykli pewnego grafu, uzyskane za pomoc rónych drzew spinajcych T 1 i T 2. G T 1 baza cykli dla T 1 T 2 baza cykli dla T 2
16 Minimalne drzewa spinajce Niech bdzie dany graf G. Zakładamy, e z kad krawdzi e i E(G) jest skojarzona pewna liczba nieujemna, bdca wag tej krawdzi. Rozwaamy problem szukania drzewa spinajcego którego suma wag krawdzi jest minimalna. Przykładem rozwizania dla tego problem jest algorytm Prima o złoonoci O(n 2 ). Procedure Prim( G, s ) begin T = ( { v i,v j }, {{v i,v j }} ), gdzie {v i,v j } jest krawdzi o najmniejszej wadze; while n(t) < n(g) do begin znajd najkrótsz krawd {u,v} tak, e u V(T) oraz v V(T); T := T {u,v}; end end
17 Minimalne drzewa spinajce Procedure Prim( G, s ) begin T = ( { v i,v j }, {{v i,v j }} ), gdzie {v i,v j } jest krawdzi o najmniejszej wadze; while n(t) < n(g) do begin znajd najkrótsz krawd {u,v} tak, e u V(T) oraz v V(T); T := T {u,v}; end end 5 1 4 7 6 7 2 3 3 3 5 4 6 2 6
18 Minimalne drzewa spinajce Algorytm Kruskala jest drugim przykładem efektywnego szukania minimalnego drzewa spinajcego. Złoono tego algorytmu to O(m log(m)). Procedure Kruskal( G, s ) begin posortuj krawdzie e 1,..., e m niemalejco wg wag; T = ; i := 1; j := ; repeat if e i nie tworzy cyklu w T then begin T := T {e i }; j := j + 1; end; i := i + 1; until j = n 1 end