TEORIA GRAFÓW. Graf skierowany dla ka»dej kraw dzi (oznaczanej tutaj jako ªuk) para wierzchoªków incydentnych jest par uporz dkowan {u, v}.

Podobne dokumenty
Algorytmy grafowe 2. Andrzej Jastrz bski. Akademia ETI. Politechnika Gda«ska Algorytmy grafowe 2

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Minimalne drzewa rozpinaj ce

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

12: Znajdowanie najkrótszych ±cie»ek w grafach

Teoria grafów i jej zastosowania. 1 / 126

c Marcin Sydow Spójno± Grafy i Zastosowania Grafy Eulerowskie 2: Drogi i Cykle Grafy Hamiltonowskie Podsumowanie

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Wykªad 1. Wprowadzenie do teorii grafów

Teoria grafów i sieci 1 / 188

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA. W obu podpunktach zakªadamy,»e kolejno± ta«ców jest wa»na.

Teoria grafów i sieci 1 / 58

ALGORYTMY SORTOWANIA DANYCH

Podstawowe algorytmy grafowe i ich zastosowania

Grafy. Andrzej Jastrz bski. Akademia ET I. Politechnika Gda«ska

Lab. 02: Algorytm Schrage

10a: Wprowadzenie do grafów

Podstawowe algorytmy grafowe i ich zastosowania

Listy i operacje pytania

Metodydowodzenia twierdzeń

Najkrótsze drogi w grafach z wagami

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

Grafy i Zastosowania. 6: Najkrótsze ±cie»ki. c Marcin Sydow. Najkrótsze cie»ki. Warianty. Relaksacja DAG. Algorytm Dijkstry.

Drzewa Gomory-Hu Wprowadzenie. Drzewa Gomory-Hu. Jakub Š cki. 14 pa¹dziernika 2009

STRUKTURY DANYCH. dane wej±ciowe problemu, ewentualne dane po±rednie, dane wynikowe (czyli rozwi zanie problemu).

Szukanie najkrótszych dróg z jednym ródłem

Mosty królewieckie, chi«ski listonosz i... kojarzenie maª»e«stw

Rekurencyjne struktury danych

1 Metody iteracyjne rozwi zywania równania f(x)=0

Wstp. Warto przepływu to

Najkrótsze drogi w grafach z wagami

Notatki z AiSD. Nr 2. 4 marca 2010 Algorytmy Zachªanne.

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Lekcja 12 - POMOCNICY

O pewnym zadaniu olimpijskim

Egzaminy i inne zadania. Semestr II.

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

1 Bª dy i arytmetyka zmiennopozycyjna

Wykªad 4. Droga i cykl Eulera i Hamiltona

i, lub, nie Cegieªki buduj ce wspóªczesne procesory. Piotr Fulma«ski 5 kwietnia 2017

XVII Warmi«sko-Mazurskie Zawody Matematyczne

a) 7 b) 19 c) 21 d) 34

c Marcin Sydow Wst p Grafy i Zastosowania Wierzchoªki 8: Kolorowanie Grafów Mapy Kraw dzie Zliczanie Podsumowanie

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Egzaminy i inne zadania. Semestr II.

Algorytmy i Struktury Danych

Grafy i Zastosowania. 9: Digrafy (grafy skierowane) c Marcin Sydow. Digrafy. Porz dki cz ±ciowe * Euler i Hamilton. Turnieje

Przekroje Dedekinda 1

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Przykªady problemów optymalizacji kombinatorycznej

Grafy i Zastosowania. 1: Wprowadzenie i poj cia podstawowe. c Marcin Sydow. Wprowadzenie. Podstawowe poj cia. Operacje na grafach.

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Metody dowodzenia twierdze«

x y x y x y x + y x y

Ekonometria. wiczenia 13 Metoda ±cie»ki krytycznej. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

c Marcin Sydow Grafy i Zastosowania BFS DFS 4: Przeszukiwanie Grafów (BFS, DFS i zastosowania) DFS nieskierowane DFS skierowane Podsumowanie

Temat: Problem najkrótszych cieek w grafach waonych, cz. I: Algorytmy typu label - setting.

c Marcin Sydow Planarno± Grafy i Zastosowania Tw. Eulera 7: Planarno± Inne powierzchnie Dualno± Podsumowanie

Elementy teorii grafów, sposoby reprezentacji grafów w komputerze

Biedronka. Wej±cie. Wyj±cie. Przykªady. VI OIG Zawody dru»ynowe, Finaª. 19 V 2012 Dost pna pami : 64 MB.

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Matematyczne Podstawy Informatyki

Programowanie wspóªbie»ne

Grafy i Zastosowania. 5: Drzewa Rozpinaj ce. c Marcin Sydow. Drzewa rozpinaj ce. Cykle i rozci cia fundamentalne. Zastosowania

Podstawowepojęciateorii grafów

Liczby zmiennoprzecinkowe

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

Omówienie zada«potyczki Algorytmiczne 2015

Ekonometria. wiczenia 1 Regresja liniowa i MNK. Andrzej Torój. Instytut Ekonometrii Zakªad Ekonometrii Stosowanej

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

Macierze. 1 Podstawowe denicje. 2 Rodzaje macierzy. Denicja

Temat: Struktury danych do reprezentacji grafów. Wybrane algorytmy grafowe.

Ekstremalnie fajne równania

Aproksymacja funkcji metod najmniejszych kwadratów

Algorytmy i struktury danych

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Arkusz maturalny. Šukasz Dawidowski. 25 kwietnia 2016r. Powtórki maturalne

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

Ukªady równa«liniowych

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Metoda tablic semantycznych. 1 Metoda tablic semantycznych

Wektory w przestrzeni

Minimalne drzewo rozpinaj ce

MiASI. Modelowanie systemów informatycznych. Piotr Fulma«ski. 18 stycznia Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Programowanie i struktury danych 1 / 44

X WARMI SKO-MAZURSKIE ZAWODY MATEMATYCZNE 18 maja 2012 (szkoªy ponadgimnazjalne)

Algorytmy zwiazane z gramatykami bezkontekstowymi

Edycja geometrii w Solid Edge ST

Bash i algorytmy. Elwira Wachowicz. 20 lutego

c Marcin Sydow Podstawy Grafy i Zastosowania Kod Prüfera 3: Drzewa Drzewa ukorzenione * Drzewa binarne Zastosowania Podsumowanie

Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1

Minimalne drzewo rozpinaj ce

Funkcja kwadratowa, wielomiany oraz funkcje wymierne

Wst p teoretyczny do wiczenia nr 3 - Elementy kombinatoryki

Problemy optymalizacyjne - zastosowania

Transkrypt:

Podstawowe denicje: TEORIA GRAFÓW Graf (nieskierowany) G = (V, E) struktura skªadaj ca si ze: zbioru wierzchoªków V = {,,..., v n } oraz zbioru kraw dzi E = {e 1, e 2,..., e m }. Z ka»d kraw dzi e skojarzona jest para wierzchoªków incydentnych (u, v). Analiz algorytmów grafowych mo»emy ograniczy do przypadków, w których para wierzchoªków jednoznacznie identykuje kraw d¹. Graf skierowany dla ka»dej kraw dzi (oznaczanej tutaj jako ªuk) para wierzchoªków incydentnych jest par uporz dkowan {u, v}. Zatem w grae skierowanym {u, v} = {v, u} ({u, v} i {v, u} oznacza dwa ró»ne ªuki, podczas gdy w grae nieskierowanym (u, v) i (v, u) to ta sama kraw d¹, tzn. (u, v) = (v, u)).

Ka»dej kraw dzi (ªukowi) b dziemy przypisywa wag (liczb ), reprezentuj c (w zastosowaniach praktycznych) np. dªugo± drogi, koszt budowy drogi, czas lub koszt przejazdu, niezawodno± poª czenia, prawdopodobie«stwo przej±cia, przepustowo±. Rozmiar grafu b dziemy identykowa przez liczb wierzchoªków n oraz liczb kraw dzi (ªuków) m.

Przykłady grafów o rozmiarze n = 6 i m = graf nieskierowany: graf skierowany: 9 9 v v

Struktury grafowe Macierz wag tablica 2-wymiarowa o rozmiarze n n, w której warto± na przeci ciu i-tego wiersza i j-tej kolumny oznacza wag kraw dzi (i, j) (ªuku {i, j}). Je±li dany graf nie zawiera kraw dzi (i, j) to w odpowiadaj cej jej komórce macierzy wpisujemy warto±. Warto±ci wyró»nione (zera, warto±ci ujemne, niesko«czono±ci, znaki nienumeryczne) znajduj si te» na przek tnej macierzy (brak kraw dzi typu (i, i)). Zauwa»my równie»,»e macierz dla grafu nieskierowanegojest zawsze symetryczna (w takim wypadku mo»na równie» przechowywa tylko poªow macierzy). Zaj to± pami ci O(n 2 ).

Lista kraw dzi tablica 2-wymiarowa o rozmiarze m (lub tablice liniowe o dªugo±ci m), gdzie pierwsza kolumna (tablica) zawiera wierzchoªki pocz tkowe, druga kolumna (tablica) wierzchoªki ko«cowe, a trzecia kolumna (tablica) wagi wszystkich kraw dzi grafu. Kraw dzie nieistniej ce nie musz by tutaj przechowywane. Zaj to± pami ci O(m).

[] [1] [2] [1] [2] [] [] [6] 9 [] Przykłady struktur grafowych Lista krawędzi A B W Macierz wag (1) [1] [2] [1] [2] [] [] [] [6] (2) [1] [] 9 () [1] [] () [1] [] () [1] [6] 9 [] [] [6] 9 (6) [2] [] (7) [2] [6] () [] []

Poª czone listy s siadów struktura skªadaj ca si z tablicy n list, gdzie lista dowi zana do komórki i-tej zawiera wszystkie kraw dzie incydentne z wierzchoªkiem i-tym (waga kraw dzi i oznaczenie wierzchoªka). Zauwa»my,»e w przypadku grafu nieskierowanego ka»da kraw d¹ (i, j) wyst puje w tej strukturze 2 razy w li±cie i-tej oraz j-tej. Zalet struktury jest to,»e wszystkie kraw dzie (ªuki) z danego wierzchoªka mamy zgrupowane w jednym miejscu (s dost pne bez konieczno±ci przeszukiwania caªego grafu). Zaj to± pami ci O(n + m).

P k wyj±ciowy odmiana poprzedniej struktury dla sytuacji, gdy nie wykonujemy na grae operacji dodawania / usuwania kraw dzi. Skªada si z tablic pierwszej o dªugo±ci n oraz dwóch o dªugo±ci m. Dwie ostatnie tablice zawieraj odpowiednio etykiety wierzchoªków ko«cowych i wagi wszystkich kraw dzi, pogrupowane w zbiory ze sob incydentne, a pierwsza tablica (odpowiadaj ca wierzchoªkom pocz tkowym) zawiera wska¹niki rozdzielaj ce poszczególne grupy (np. je±li wierzchoªek 1 ma kraw dzi incydentnych, to komórki [1] i [2] pierwszej tablicy zawieraj odpowiednio wska¹niki na komórki [1] i [6] tablicy drugiej). Struktura posiada zalet struktury wcze±niejszej zgrupowanie kraw dzi incydentnych poszczególnych wierzchoªków, przy braku typów wska¹nikowych. Zaj to± pami ci O(n + m).

[] [] [6] Przykłady struktur grafowych (c.d.) 9 [1] [] Pęk wyjściowy [2] Połączone listy sąsiadów B W [1] [2] [] [] [2] [] [] [6] 9 [1] [6] - [1] [2] [1] 1 [2] [] 7 [] [2] (1) [] (2) [] () [] [] -1 [6] 9 () [6] [6] -1 [1] () [6] - (6) [1] (7) [2] ()

Dalsze denicje Droga (±cie»ka) z wierzch. do v k w grae skierowanym G to ci g ªuków {{, }, {, },..., {v k 1, v k }}, który mo»emy jednoznacznie okre±li po prostu przez ci g (permutacj ) wierzchoªków, przez które droga ta przebiega, tj. {,,..., v k 1, v k }. Wag drogi b dziemy okre±la sum wag ªuków j tworz cych. Cykl droga zamkni ta, tzn. taka,»e = v k. Graf acykliczny graf nie zawieraj cy cykli. Zauwa»my,»e z wierzchoªka s do t mo»e istnie wiele ró»nych dróg, zatem najkrótsz drog b dzie ta spo±ród dróg, która ma najmniejsz wag. Podgraf G = (V, E ) grafu G = (V, E) to graf o rozmiarze n n i m m, dla którego V V oraz E E (tzn. wszystkie wierzchoªki i ªuki G nale» do G).

Graf spójny (nieskierowany) graf, dla którego istnieje droga mi dzy ka»d par wierzchoªków. Spójny graf skierowany to taki, którego wersja nieskierowana jest spójna. Drzewo spójny, nieskierowany graf acykliczny. W drzewie, jak w ka»dym grae spójnym (nieskierowanym), istnieje droga mi dzy ka»d par wierzchoªków. Zatem doª czenie nowej kraw dzi spowoduje powstanie cyklu, a usuni cie jakiejkolwiek kraw dzi z drzewa spowoduje jego rozspójnienie. Wreszcie, w drzewie m = n 1. Drzewo rozpinaj ce (spinaj ce) T = (V T, E T ) podgraf (nieskierowanego, spójnego) grafu G = (V, E), który jest spójny i V T = V. Graf spójny mo»e zawiera wiele (do n n 2 ) ró»nych drzew rozpinaj cych, z których to o najmniejszej wadze nazywamy Minimalnym Drzewem Rozpinaj cym (Spinaj cym) MST (ang. Minimum Spanning Tree).

Przykłady dróg z wierzchołka do 9 v

Przykłady dróg z wierzchołka do Droga D1 {,,,, } Waga D1: +++ = 21 6 v

Przykłady dróg z wierzchołka do Droga D1 {,,,, } Waga D1: +++ = 21 6 Droga D2 {,,v, } v Waga D2: ++6 = 1

Przykłady drzew MST Drzewo MST1 Waga MST1: ++++6 = 2 6 v

Przykłady drzew MST Drzewo MST1 Waga MST1: ++++6 = 2 v 6 Drzewo MST2 Waga MST2: ++++6 = 27

Algorytm KRUSKALA (196) Algorytmy wyznaczania MST polega na doª czaniu kolejno kraw dzi w porz dku ich niemalej cych wag, o ile doª czana kraw d¹ nie utworzy cyklu z ju» wybranymi kraw dziami. Aby wyznaczy zªo»ono± obliczeniow algorytmu, musimy znale¹ efektywn metod sprawdzania, czy doª czana kraw d¹ utworzy cyklz ju» doª czonymi.

Zauwa»my,»e doª czane kraw dzie nie musz tworzy spójnego grafu z ju» doª czonymi (spójny graf na pewno otrzymujemy w pierwszym kroku gdy mamy doª czon tylko 1 kraw d¹ i potem mo»emy otrzyma dopiero w ostatnim kroku gdy otrzymujemy peªne drzewo). Zatem powy»sz procedur mo»emy skonstruowa w ten sposób,»e tworzymy tablic C o rozmiarze n i przy jej pomocy kolorujemy wierzchoªki. Na pocz tku ka»dej komórce przypisujemy inn warto± (reprezentuj c kolor danego wierzchoªka), np. C[i] = i dla i = 1, 2,..., n. W trakcie dziaªania procedury, wierzchoªki nale» ce do tego samego poddrzewa b d posiada ten sam kolor. Zatem na pocz tku ka»dy wierzchoªek nale»y do innego poddrzewa, a na ko«cu wszystkie wierzchoªki musz nale»e do tego samego poddrzewa.

Gdy chcemy doª czy powiedzmy kraw d¹ (u, v), to musimy rozpatrzy nast puj ce przypadki: 1. aden wierzchoªek (ani u, ani v) jeszcze nie zostaª wybrany (tzn. nie doª czono jeszcze kraw dzi, która byªaby incydentna z u lub z v). Zatem ka»dy z nich ma inny kolor (taki, którego nie posiada»aden inny wierzchoªek). Wtedy wierzchoªkowi u nadajemy kolor wierzch. v (C[u] = C[v]) lub odwrotnie (C[v] = C[u]) oba wierzchoªki otrzymuj ten sam kolor, a wi c nale» od teraz do tego samego (nowego) poddrzewa. Taka operacja oczywi±cie nie utworzy cyklu, a wi c jest dopuszczalna. 2. Jeden wierzch., np. u, byª ju» wcze±niej wybrany, a drugi, v, jeszcze nie. Zatem doª czenie kraw dzi (u, v) nie spowoduje powstania cyklu. Wtedy wierzchoªek jeszcze nie wybrany musimy doª czy do poddrzewa, do którego nale»y wierzchoªek u (tzn. wierzchoªkowi v przypisujemy kolor wierzchoªka u: C[v] = C[u]).

. Oba wierzchoªki ju» wcze±niej zostaªy wybrane, z tym»e nale» do ró»- nych poddrzew (wierzchoªki u i v posiadaj wi c ró»ne kolory, podobnie jak we wcze±niejszych przypadkach). Zatem doª czenie kraw dzi spowoduje poª czenie dwóch ró»nych poddrzew, ale nie spowoduje to powstania cyklu. W tej sytuacji wszystkie wierzchoªki jednego poddrzewa musz przyj kolor drugiego, np. C[i] = C[v] je±li C[i] == C[u].. Oba wierzchoªki ju» wcze±niej zostaªy wybrane i nale» do tego samego poddrzewa (posiadaj ten sam kolor). Wtedy próbujemy doª czy now kraw d¹ do istniej cego drzewa, co jak ju» wiadomo zawsze spowoduje powstanie cyklu. Zatem taka operacja jest zabroniona. Podsumowuj c powy»sze, doª czenie kraw dzi (u, v) jest zabronione (powstanie cykl) je±li C[u] == C[v] (przypadek ). W przeciwnym wypadku nale»y doª czy kraw d¹ i wykona operacje na tablicy C opisane odpowiednio w punktach 1, 2 lub.

Oczywi±cie sprawdzenie powy»szego warunku (C[u] == C[v]) zajmie O(1) czasu, jednak przypadek mo»e w skrajnej sytuacji wymaga przekolorowania n 2 wierzchoªków (przy wprowadzeniu dodatkowych zmiennych przechowuj cych informacje o rozmiarze poszczególnych poddrzew, operacj t mo»na skróci do n/2 operacji). Zatem operacja sprawdzenia, czy doª czenie pojedynczej kraw dzi do ju» doª czonych spowoduje powstanie cyklu zajmie O(n) czasu. Teraz mo»emy wróci do wyznaczenia zªo»ono±ci caªego algorytmu Kruskala. Zale»y ona od kilku czynników. Je±li do przechowywania grafu wykorzystamy list kraw dzi i przed rozpocz ciem doª czania kraw dzi posortujemy t struktur niemalej co ze wzgl du na wagi (co zajmie O(m log m) czasu) to b dziemy mogli nast pnie analizowa kraw dzie po kolei, za ka»dym razem stosuj c procedur sprawdzania cyklu.

Liczba takich iteracji, oznaczmy j przez p, b dzie si zawieraªa mi dzy n 1 (»adna z analizowanych kraw dzi nie tworzyªa cyklu) a m (dopiero ostatnia kraw d¹ spowodowaªa doª czenie wszystkich wierzchoªków i zespójnienie poddrzew). Zatem zªo»ono± takiej wersji algorytmu Kruskala wyniesie O(m log m + pm). Zauwa»my jednak,»e w przypadku grafów g stych (m >> n) tylko niewielka cz ± wszystkich kraw dzi b dzie analizowana. Wtedy sortowanie wszystkich b dzie niepotrzebne zbyt rozrzutne. Lepiej wtedy umie±ci kraw dzie w kopcu i pobiera za ka»dym razem najkrótsz z jeszcze nie doª czonych z korzenia. Wtedy takie pobranie b dzie zajmowa O(log m), a takich pobra«b dzie p, zatem zªo»ono± caªego algorytmu wyniesie gdzie n p m. O(p(log m + m)) = O(pm), Mo»liwe jest te» takie zaimplementowanie algorytmu Kruskala,»e jego zªo-»ono± wyniesie O(m log m).

Algorytm KRUSKALA 9 v

Algorytm KRUSKALA 1. (, ) 9 v

Algorytm KRUSKALA 1. (, ) 2. (,v ) 9 v

Algorytm KRUSKALA 1. (, ) 2. (,v ). (,v ) 9 v

Algorytm KRUSKALA 1. (, ) 9 2. (,v ). (,v ). (, ) cykl v

Algorytm KRUSKALA 1. (, ) 9 2. (,v ). (,v ). (, ) cykl v

Algorytm KRUSKALA 1. (, ) 9 2. (,v ). (,v ). (, ) cykl. (, ) v

Algorytm KRUSKALA 1. (, ) 9 2. (,v ). (,v ). (, ) cykl. (, ) v 6. (, )

Algorytm KRUSKALA 1. (, ) 9 2. (,v ). (,v ). (, ) cykl. (, ) v 6. (, ) waga MST: 2

Algorytm PRIMA (197) rozpoczyna si od wybrania dowolnego wierzchoªka i sukcesywnym doª czaniu najbli»szego s siada (tj. wierzchoªka, który jest poª czony z którym± z ju» doª czonych kraw dzi o najmniejszej wadze). Dzi ki temu,»e w ka»dym kroku algorytmu doª czamy nowy wierzchoªek do istniej cego poddrzewa, nigdy nie spowoduje to powstania cyklu, a wszystkich iteracji b dzie n 1. Intuicyjnie, najkorzystniej jest zastosowa do tego algorytmu struktury pozwalaj ce na efektywne wyszukiwanie wierzchoªków incydentnych w danym, a wi c np. poª czone listy s siadów. Znalezienie kolejnego wierzchoªka do doª czenia b dzie w takim wypadku wymagaªo przejrzenia list struktury odpowiadaj cych wierzchoªkom ju» doª czonym i wybraniu kraw dzi o najmniejszej wadze. W najgorszym wypadku b dzie wi c musieli przejrze wszystkie kraw dzie, a wi c pojedyncza iteracja zajmie O(m) czasu. Zatem zªo»ono± caªego algorytmu Prima to O(nm).

Algorytm Prima mo»na te» zaimplementowa w taki sposób,»ewierzchoªki oczekuj ce na doª czenie umie±cimy w kolejce Q: pocz tkowo zawiera ona wszystkie wierzchoªki, w ka»dej iteracji pobierany jest dokªadnie jeden, a algorytm ko«czy dziaªanie, gdy stanie si ona pusta. Kolejk t mo»na zaimplementowa jako kopiec, w którym warto±ci w zªa jest odªegªo± danego wierzchoªka od najbli»szego wierzchoªka spo±ród ju» doª czonych. Warto±ci te nale»y aktualizowa po ka»dym doª czeniu nowego wierzchoªka, ale za to mamy od razu dost pn informacj, który wierzchoªek ma by doª czony jako nast pny. Takie podej±cie umo»liwia uzyskanie zªo»ono±ci obliczeniowej algorytmu Prima O(m log n). Z kolei, je±li zamiast zwykªego kopca, u»yjemy kopca Fibonacciego, uzyskamy zªo»ono± O(m + n log n).

Algorytm PRIMA 9 v

Algorytm PRIMA 9 v

Algorytm PRIMA 9 v

Algorytm PRIMA 1. (, ) 9 v

Algorytm PRIMA 1. (, ) 9 v

Algorytm PRIMA 1. (, ) 2. (,v ) 9 v

Algorytm PRIMA 1. (, ) 2. (,v ) 9 v

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) 9 v

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) 9 v

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) 9. (, ) v

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) 9. (, ) v

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) v 9. (, ). (, )

Algorytm PRIMA 1. (, ) 2. (,v ). (,v ) 9. (, ). (, ) v waga MST: 2

Algorytmy wyznaczania najkrótszych dróg Algorytm DIJKSTRY (199) sªu»y do wyznaczania najkrótszych dróg z wyznaczonego w zªa (¹ródªa, s) do wszystkich pozostaªych w zªów, w przypadku gdy wagi wszystkich ªuków grafu s nieujemne. W trakcie dziaªania algorytmu, dla ka»dego w zªa, x, pami tane jest oszacowanie wagi najkrótszej drogi ze ¹ródªa: d sx. Przed rozpocz ciem dzia- ªania algorytmu warto±ci te wynosz dla wszystkich w zªów z wyj tkiem ¹ródªa, dla którego d ss = 0.

W ka»dym kroku znajdowany jest w zeª x, dla którego oszacowanie to jest minimalne i nieustalone i jest ono ustalane (oznacza to,»e dla tego w zªa znale¹li±my ju» drog minimaln ). Nast pnie dokonuje si relaksacji wszystkich ªuków wychodz cych z w zªa x, tzn. je±li aktualne oszacowanie, d sy, badanego w zªa y, jest wi ksze ni» suma oszacowania d sx oraz wagi, w x y, ªuku {x, y} to d sy = d sx + w x y.

Algorytm DIJKSTRY 2 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 12

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 12

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 12

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : { }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {, }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {, }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {,, }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {,, }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {,,, }

Algorytm DIJKSTRY 2 Krok v 1 0 12 12 2 0 7 12 0 7 12 0 7 12 v 7 0 7 9 6 0 7 9 Najkrótsza droga z do : {,,, }

Zªo»ono± obliczeniowa algorytmu Dijkstry: Poniewa» w ka»dym kroku algorytmu ustalane jest oszacowanie jednego w zªa, wi c wszystkich iteracji jest n. W ka»dej iteracji nale»y wyznaczy w zeª o najmniejszym oszacowaniu O(log n), je±li oszacowania w zªów nieustalonych b dziemy przechowywali w kopcu. W tej samej iteracji nale»y jeszcze dokona relaksacji ªuków wychodz cych z ustalonego O(n). Zatem caªkowita zªo»ono± algorytmu wynosi O(n 2 ). Mo»liwa jest jednak taka implementacja algorytmu, aby osi gn zªo»ono± O(m log n).

Algorytm BELLMANA-FORDA umo»liwia, w przeciwie«stwie do algorytmu Dijkstry, wyznaczanie najkrótszych dróg z wyznaczonego w zªa do pozostaªych przy dodatnich i ujemnych wagach. Warunkiem jest, aby graf nie zawieraª cykli o ujemnej wadze, osi galnych ze ¹ródªa. W algorytmie tym równie» wykorzystuje si relaksacj ªuków wychodz - cych. Jednak»eby metod t mo»na byªo z powodzeniem wykorzysta w grafach z ujemnymi wagami, nale»y w ka»dej z n iteracji dokona relaksacji dla wszystkich m ªuków. Prowadzi to do zªo»ono±ci O(nm).

Zauwa»my jednak,»e kolejno± rozpatrywania ªuków do relaksacji mo»e wpªywa na efektywno± algorytmu. Np. w pierwszej iteracji zrelaksowanie najpierw ªuków wychodz cych ze ¹ródªa sprawi,»e w tej samej iteracji b dzie mo»liwe zrelaksowanie równie» ªuków incydentnych do wcze±niej wspomnianych, a potem incydentnych z tymi ostatnimi, itd. Natomiast je±li zaczniemy relaksacj od ªuków najbardziej oddalonych od ¹ródªa, to w pierwszej iteracji b dziemy mogli zrelaksowa jedynie ªuki bezpo±rednio wychodz ce ze ¹ródªa (pozostaªe zostan zrelaksowane dopiero w kolejnych iteracjach). Oczywi±cie kolejno± analizowania ªuków nie wpªywa na optymalno± algorytmu ta jest gwarantowana (teoretycznie udowodniona).

W zwi zku z powy»szym, ide algorytmu Bellmana-Forda mo»na zastosowa do nast puj cej implementacji. Tworzymy kolejk w zªów do rozpatrzenia. Jej funkcja jest taka,»e najpierw relaksujemy ªuki wychodz ce z pierwszego w zªa z kolejki, potem z w zªa drugiego, itd. W ka»dej iteracji do kolejki doª czamy w zªy incydentne z rozpatrywanym, dla których nast piªa poprawa i o ile ju» si tam nie znajduj. Pocz tkowo kolejka zawiera tylko ¹ródªo, a algorytm ko«czy si gdy w kolejce nie b dzie ju»»adnych w zªów. Dodatkowo, wa»ne jest miejsce umieszczania w zªów w kolejce: je±li w zeª ju» si znajduje w kolejce, to zostaje na tym miejscu; je±li byª ju» wcze±niej w kolejce (ale obecnie nie znajduje si w niej), to jest umieszczany na jej pocz tku; w przeciwnym wypadku traa na koniec.

Algorytm BELLMANA-FORDA Q = { } 2 v 0 12 v 7

Algorytm BELLMANA-FORDA Q = { } 2 v 0 12 v 7

Algorytm BELLMANA-FORDA Q = {,,v,, } 2 v 0 12 12 v 7

Algorytm BELLMANA-FORDA Q = {,v,, } 2 v 0 12 12 v 7

Algorytm BELLMANA-FORDA Q = {,v,, } 2 v 0 12 12 v 7

Algorytm BELLMANA-FORDA Q = {v,, } 2 v 0 12 12 v 7

Algorytm BELLMANA-FORDA Q = {v,, } 2 v 0 7 12 12 v 7

Algorytm BELLMANA-FORDA Q = {, } 2 v 0 7 12 12 v 7

Algorytm BELLMANA-FORDA Q = {, } 2 v 0 7 12 12 v 7

Algorytm BELLMANA-FORDA Q = { } 2 v 0 7 12 12 v 7

Algorytm BELLMANA-FORDA Q = { } 2 v 0 7 9 12 v 7

Algorytm BELLMANA-FORDA Q = { } 2 v 0 7 9 12 v 7

Algorytm BELLMANA-FORDA Q = { } 2 v 0 7 9 12 v 7

Wyznaczenie zªo»ono±ci obliczeniowej powy»szej implementacji jest kªopotliwe (w zªy mog traa wielokrotnie do kolejki) mo»na wyznaczy nawet takie przypadki, dla których b dzie to zªo»ono± wykªadnicza. Jednak zazwyczaj jest to maªo realne. Oczywi±cie optymalno± algorytmu jest zachowana.

Rozpatrzmy jeszcze szczególny przypadek zagadnienia: najkrótsza droga ze ¹ródªa do okre±lonego (pojedynczego) w zªa. W takim wypadku (i przy nieujemnych wagach) przewag ma algorytm Dijkstry, gdy» mo»emy go zako«czy nie po n iteracjach, ale gdy zostanie ustalone oszacowanie w zªa ko«cowego (przeznaczenia). W najgorszym wypadku mo»e to by oczywi±cie ostatnia (n-ta) iteracja, ale cz sto b dzie to która± z iteracji wcze±niejszych.

Wyznaczanie maksymalnego przepªywu w sieciach W tym zagadnieniu wagi ªuków nie reprezentuj odlegªo±ci (jak przy najkrótszych drogach), tylko maksymalny mo»liwy przepªyw pomi dzy w zªami(informacji, pªynu, gazu, itp.). Problem polega na wyznaczeniu takich warto±ci przepªywu pomi dzy w zªami (nie wi kszych ni» maksymalne), aby przepªyw ze ¹ródªa do okre±lonego w zªa ko«cowego byª jak najwi kszy. Algorytm FORDA-FULKERSONA dotyczy acyklicznych grafów skierowanych. Jest to jedna z podstawowych idei w tym zakresie. Najogólniej, polega ona na sukcesywnym wyszukiwaniu (dowolnych) dróg ze ¹ródªa do uj±cia (w zªa ko«cowego).

Mo»na to zrobi w ten sposób,»e b d c w ¹ródle, wybieramy pierwszy w zeª incydentny (nale»y ustali kolejno± w zªów), z niego znowu wybieramy pierwszy incydentny, itd. W efekcie, albo dotrzemy do uj±cia, albo do innego w zªa ko«cowego (z którego nie ma»adnych ªuków wychodz cych): Je±li dotarli±my do w zªa nie b d cego uj±ciem, to cofamy si do w zªa poprzedzaj cego i wybieramy kolejny w zeª incydentny (je±li trzeba, to cofamy si o wi cej ni» 1 w zeª). Šuki do w zªów, z których si wycofujemy (gdy nie mo»na z nich osi - gn uj±cia), usuwamy. Je±li ostatni w zeª jest uj±ciem, to mamy wyznaczon drog.

Ka»dorazowo, po wyznaczeniu jakiej± drogi, znajdowany jest w niej ªuk o najmniejszym przepªywie i dan drog ustalamy przepªyw o takiej wªa- ±nie warto±ci, tzn. od przepªywu ka»dego ªuku z danej drogi odejmujemy t najmniejsz warto±. Nast pnie ªuki o zerowym przepªywie usuwamy z grafu. Algorytm ko«czy dziaªanie, gdy usuniemy wszystkie ªuki wychodz ce ze ¹ródªa. Warto± przepªywu maksymalnego uzyskujemy poprzez zsumowanie przepªywów ze wszystkich wyznaczonych dróg. Wykazano,»e czas dziaªania algorytmu mo»e wzrosn do niesko«czono±ci, je±li wybór kolejnych w zªów w drogach b dzie dowolny. Je±li natomiast zawsze b dziemy wyszukiwali drogi najkrótsze (o najmniejszej liczbie ªuków), to uzyskamy algorytm wielomianowy O(nm 2 ). Tak wersj algorytmu nazywamy algorytmem Edmondsa-Karpa (1969).

Algorytm FORDA-FULKERSONA 2 v 7

Algorytm FORDA-FULKERSONA 2 v 7

Algorytm FORDA-FULKERSONA 2 v 7

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 7

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 2 0

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = F(,,, ) = 2 v 2

Algorytm FORDA-FULKERSONA 2 0 Przepływy: F(,, ) = F(,,, ) = 2 1 v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = F(,,, ) = 2 1 v 2

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = F(,,, ) = 2 1 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 1 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 v 2 0 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 2 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 2 v 2

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 2 v

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 v

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 v

Algorytm FORDA-FULKERSONA Przepływy: F(,, ) = F(,,, ) = 2 F(,v,, ) = 2 v

Algorytm FORDA-FULKERSONA 2 Przepływy: F(,, ) = F(,,, ) = 2 v 7 F(,v,, ) = 2 Maks. przepływ = 9