Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 5 i 6. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

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

Temat: Algorytmy zachłanne

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

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

Programowanie dynamiczne i algorytmy zachłanne

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

Podejście zachłanne, a programowanie dynamiczne

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Algorytmy i Struktury Danych.

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Algorytmy i Struktury Danych.

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Sortowanie topologiczne skierowanych grafów acyklicznych

Algorytmy i Struktury Danych.

Wstęp do programowania

Digraf. 13 maja 2017

Ogólne wiadomości o grafach

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

Ćwiczenie 3 Programowanie dynamiczne

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

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

Sprawozdanie do zadania numer 2

Programowanie dynamiczne cz. 2

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

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Algorytmy i Struktury Danych.

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

Wstęp do programowania

Algorytmy zachłanne. dr inż. Urszula Gałązka

Matematyczne Podstawy Informatyki

Minimalne drzewa rozpinające

Algorytmy grafowe. Wykład 1 Podstawy teorii grafów Reprezentacje grafów. Tomasz Tyksiński CDV

Algorytmy i Struktury Danych.

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Literatura. 1) Pojęcia: złożoność czasowa, rząd funkcji. Aby wyznaczyć pesymistyczną złożoność czasową algorytmu należy:

Drzewa poszukiwań binarnych

Podstawowe własności grafów. Wykład 3. Własności grafów

Siedem cudów informatyki czyli o algorytmach zdumiewajacych

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Algorytmiczna teoria grafów

Spis treści. Przykład. Przykład 1 Przykład 2. Twórcy Informacje wstępne Pseudokod Przykład. 1 Grafy skierowane z wagami - przypomnienie

Metody Programowania

TEORETYCZNE PODSTAWY INFORMATYKI

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Algorytmy Grafowe. dr hab. Bożena Woźna-Szcześniak, prof. UJD. Wykład 1,2,3. Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie

Znajdowanie skojarzeń na maszynie równoległej

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Graf. Definicja marca / 1

KARTA KURSU. Algorytmy, struktury danych i techniki programowania. Algorithms, Data Structures and Programming Techniques

Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.

Matematyczne Podstawy Informatyki

Algorytmy i struktury danych.

Sieć (graf skierowany)

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

Algorytmy i Struktury Danych.

Zagadnienie najkrótszej drogi w sieci

Matematyczne Podstawy Informatyki

Sortowanie - wybrane algorytmy

Algorytmy grafowe. Wykład 2 Przeszukiwanie grafów. Tomasz Tyksiński CDV

Programowanie dynamiczne

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

7. Teoria drzew - spinanie i przeszukiwanie

ĆWICZENIE NR 1 WPROWADZENIE DO INFORMATYKI

Złożoność obliczeniowa klasycznych problemów grafowych

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Techniki konstruowania algorytmów. Metoda dziel i zwyciężaj

Kolorowanie wierzchołków grafu

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Algorytmy i Struktury Danych

Gramatyki grafowe. Dla v V, ϕ(v) etykieta v. Klasa grafów nad Σ - G Σ.

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

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

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

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

Matematyka dyskretna

Segmentacja obrazów cyfrowych z zastosowaniem teorii grafów - wstęp. autor: Łukasz Chlebda

Układy równań liniowych

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Matematyka dyskretna - 7.Drzewa

Zadania z egzaminów z Algorytmiki

Algorytmy wyznaczania centralności w sieci Szymon Szylko

Algorytmy i Struktury Danych

Grafy i sieci w informatyce - opis przedmiotu

Teoria obliczeń i złożoność obliczeniowa

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Analiza algorytmów zadania podstawowe

Matematyczne Podstawy Informatyki

Algorytmy z powracaniem

Projektowanie i analiza algorytmów

Przykłady problemów optymalizacyjnych

Metody teorii gier. ALP520 - Wykład z Algorytmów Probabilistycznych p.2

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

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

zajęcia 3. Marcin Andrychowicz, Tomasz Kulczyński,

Schemat programowania dynamicznego (ang. dynamic programming)

Transkrypt:

Algorytmy Grafowe dr hab. Bożena Woźna-Szcześniak, prof. UJD Uniwersytet Humanistyczno-Przyrodniczy im. Jana Długosza w Częstochowie b.wozna@ujd.edu.pl Wykład 5 i 6 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Spis treści Algorytmy Zachłanne Grafy z wagami 3 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Algorytmy zachłanne Algorytmy Zachłanne Algorytmy zachłanne stosowane do rozwiazywania problemów optymalizacyjnych, w których osiagnięcie optymalnego rozwiazania wymaga podejmowania wielu decyzji. Algorytm zachłanny przy podejmowaniu jednej z wielu możliwych decyzji zawsze wykonuje działanie, które wydaje się w danej chwili najkorzystniejsze. Algorytm zachłanny wybiera lokalnie optymalna możliwość w nadziei, że doprowadzi ona do globalnie optymalnego rozwiazania (działa zachłannie) Algorytmy zachłanne nie zawsze prowadza do optymalnych rozwiazań. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 3 / 43

Algorytmy Zachłanne Problem wyboru zajęć Problem wyboru zajęć, to problem przydzielenia dostępu do zasobu wykorzystywanego podczas wykonywania pewnych zajęć. Założenia: Niech będzie dany zbiór proponowanych zajęć S = {,..., n}, do których ma być przydzielona sala wykładowa (zasoby), w której może się odbywać w danej chwili tylko jedno z tych zajęć. Każde zajęcie ma swój czas rozpoczęcia s i oraz czas zakończenia f i takie, że s i f i. Jeżeli zajęcie o numerze i zostanie wytypowane, to zajmuje zasób [s i, f i ). Zajęcia o numerach i oraz j sa zgodne, jeśli [s i, f i ) [s j, f j ) = 0 Problem: Wyznaczyć największy podzbiór parami zgodnych zajęć. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 4 / 43

Algorytmy Zachłanne Jak działa algorytm wyczerpujacy (naiwny)? Generujemy wszystkie podzbiory zbioru zajęć Wybieramy te podzbiory, które sa parami zgodne Wybieramy ten podzbiór, który ma najwięcej elementów Obserwacja: Algorytm wyczerpujacy ma złożoność O( n ) B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 5 / 43

Algorytmy Zachłanne Algorytm zachłanny: Greedy-Activity-Selector Dane wejściowe: tablice s (czasów rozpoczęcia) i f (czasów zakończenia) oraz rozmiar tablic n. Założenie:, że zajęcia sa posortowane ze względu na czas zakończenia. Require: Greedy-Activity-Selector(s,f,n) : A := {} : j := 3: for i := to n do 4: if s i f j then 5: A := A {i} 6: j := i 7: end if 8: end for 9: return A Zbiór A zawiera wybrane zajęcia, a zmienna j zawiera numer ostatnio dodanego do A zajęcia. Zajęcia sa rozpatrywane w porzadku rosnacego czasu zakończenia, zatem f j jest zawsze największym czasem zakończenia zajęcia należacego do A. W wierszach - wybieramy zajęcie, zbiór {} staje się wartościa zmiennej A, a zmiennej j przypisujemy numer tego zajęcia. W wierszach 3-8 rozpatrywane sa wszystkie zajęcia; zajęcie zostaje dołaczone, jeżeli jest zgodne ze wszystkimi dołaczonymi dotychczas zajęciami. Aby stwierdzić, czy zajęcie i jest zgodne z każdym zajęciem ze zbioru A, wystarczy sprawdzić czy jego czas rozpoczęcia s i nie jest wcześniejszy niż czas zakończenia f j zajęcia ostatnio dodanego do A. Jeśli zajęcie i jest zgodne, to w wierszach 5-6 zostaje ono dodane do zbioru A oraz jest aktualizowana wartość j. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 6 / 43

Algorytmy Zachłanne Algorytm zachłanny: Greedy-Activity-Selector Zakładajac, że dane wejściowe sa uporzadkowane rosnaco według czasów zakończenia zajęć, Greedy-Activity-Selector wyznacza maksymalny podzbiór zajęć n elementowego zbioru S w czasie Θ(n). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Algorytmy Zachłanne Algorytm zachłanny: Greedy-Activity-Selector Zakładajac, że dane wejściowe sa uporzadkowane rosnaco według czasów zakończenia zajęć, Greedy-Activity-Selector wyznacza maksymalny podzbiór zajęć n elementowego zbioru S w czasie Θ(n). Zajęcie wybrane przez Greedy-Activity-Selector ma zawsze najwcześniejszy czas zakończenia wśród zajęć, które moga być dołaczone bez zakłócenia zgodności zbioru A. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Algorytmy Zachłanne Algorytm zachłanny: Greedy-Activity-Selector Zakładajac, że dane wejściowe sa uporzadkowane rosnaco według czasów zakończenia zajęć, Greedy-Activity-Selector wyznacza maksymalny podzbiór zajęć n elementowego zbioru S w czasie Θ(n). Zajęcie wybrane przez Greedy-Activity-Selector ma zawsze najwcześniejszy czas zakończenia wśród zajęć, które moga być dołaczone bez zakłócenia zgodności zbioru A. Wybór jest zachłanny ponieważ pozostawia możliwie najwięcej swobody przy wyborze pozostałych zajęć. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Algorytmy Zachłanne Algorytm zachłanny: Greedy-Activity-Selector Zakładajac, że dane wejściowe sa uporzadkowane rosnaco według czasów zakończenia zajęć, Greedy-Activity-Selector wyznacza maksymalny podzbiór zajęć n elementowego zbioru S w czasie Θ(n). Zajęcie wybrane przez Greedy-Activity-Selector ma zawsze najwcześniejszy czas zakończenia wśród zajęć, które moga być dołaczone bez zakłócenia zgodności zbioru A. Wybór jest zachłanny ponieważ pozostawia możliwie najwięcej swobody przy wyborze pozostałych zajęć. Wybór na każdym kroku zajęcia, które ma najwcześniejszy czas zakończenia wśród zajęć, które moga być dołaczone do zbioru maksymalizuje ilość nie zajętego czasu po jego dokonaniu. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Algorytmy Zachłanne Strategia zachłanna: przykład Źródło: Cormen T.H., Leiserson Ch.E., Rivest R.L. Wprowadzenie do algorytmów. WNT, 997 i późniejsze. Dane sa zajęcia: s i 8 3 8 0 5 5 3 6 f i 4 4 5 3 6 7 9 8 0 Porzadkujemy zajęcia ze względu na czas zakończenia f f... f n i 3 4 5 6 7 8 9 0 s i 3 0 5 3 5 6 8 8 f i 4 5 6 7 8 9 0 3 4 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 8 / 43

Algorytmy Zachłanne Strategia zachłanna: przykład i s_i f_i 0 3 4 5 6 7 8 9 0 3 4 4 3 5 3 0 6 3 4 5 7 4 5 3 8 5 4 6 5 9 6 4 7 6 0 7 4 8 8 8 4 9 8 9 4 8 0 3 0 4 8 4 4 8 rozwiązanie 3 4 8 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 9 / 43

Algorytmy Zachłanne Charakterystyczne cechy problemów poddajacych się strategii zachłannej optymalna podstruktura - optymalne rozwiazanie jest funkcja optymalnych rozwiazań podproblemów. Na przykład dla problemu wyboru zajęć własność optymalnej podstruktury polega na tym, że: jeżeli optymalne rozwiazanie A tego problemu rozpoczyna się od zajęć o numerze, to A = A {} jest optymalnym rozwiazaniem problemu optymalnego wyboru zajęć dla zbioru S = {i S : s i f }. własność wyboru zachłannego - za pomoca lokalnie optymalnych (zachłannych) wyborów można uzyskać globalnie optymalne rozwiazanie. W algorytmie zachłannym wybory sa podejmowane jako najlepsze (z punktu widzenia zadania) w danej chwili. Wybory podejmowane w algorytmie zachłannym nie sa zależne od wyborów przeszłych. Można formalnie udowodnić (stosujac metodę indukcji), że dany problem ma własność wyboru zachłannego. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 0 / 43

Algorytmy Zachłanne Problem przydziału zajęć do minimalnej liczby sal Problem: Dany jest zbiór zajęć, które maja się odbyć w pewnej liczbie sal wykładowych. Należy wyznaczyć taki przydział zajęć do sal, aby liczba użytych sal była najmniejsza. Metoda zachłanna rozwiazuj aca ten problem: Niech będzie dany zbiór zajęć S =,..., n, do których ma być przydzielona sala wykładowa (zasoby), w której może się odbywać w danej chwili tylko jedno z tych zajęć. Każde zajęcie ma swój czas rozpoczęcia s i oraz czas zakończenia f i takie, że s i f i. Jeżeli zajęcie o numerze i zostanie wytypowane, to zajmuje zasób [s i, f i ). Zajęcia o numerach i oraz j sa zgodne jeśli [s i, f i ) [s j, f j ) = 0. Niech zajęcia w S będa uporządkowane niemalejąco ze względu na ich czas rozpoczęcia; Jeżeli znajda się dwa zajęcia i oraz j takie, że s i = s j, to wówczas pierwsze będzie to zajęcie, które ma dłuższy czas trwania. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Algorytmy Zachłanne Algorytm: GREEDY-ROOM-SELECTOR Dane wejściowe: tablice s (czasów rozpoczęcia) i f (czasów zakończenia) oraz rozmiar tablic n. Założenie:, że zajęcia sa posortowane ze względu na czas rozpoczęcia. Require: Greedy-Room-Selector(s,f) : k := : A := {,,..., length[s]} 3: while A do 4: p[k] := Greedy Selector(s, f ) 5: A := A p[k] 6: if A then 7: k := k + 8: end if 9: end while 0: return k Zadaniem procedury Greedy-Selector jest wybranie ze zboru S podzbioru zawierajacego wszystkie parami zgodne zajęcia, wśród których jest zajęcie nr. Działanie tej procedury jest analogiczne do działania procedury Greedy-Activity-Selector. Różnica polega na tym, że Greedy-Selector pobiera zajęcia uporzadkowane zgodnie z czasem ich rozpoczęcia, a Greedy-Activity-Selector pobiera zajęcia uporzadkowane zgodnie z czasem ich zakończenia. Złożoność Θ(n ) B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Algorytmy Zachłanne Algorytm: GREEDY-ROOM-SELECTOR - Uwagi Liczba sal wyznaczona Greedy-Room-Selector jest zawsze najmniejsza. Wybór jest zachłanny ponieważ pozostawia w danej Sali minimalna ilość niewykorzystanego czasu. Twierdzenie: Algorytm Greedy-Room-Selector generuje optymalne rozwiazanie problemu przydziału zajęć do jak najmniejszej liczby sal. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 3 / 43

Algorytmy Zachłanne Problem wydawania reszty za pomoca jak najmniejszej liczby monet Problem: Mamy resztę R i N monet o nominałach o określonych wartościach całkowitych. Monet o określonym nominale jest nieograniczona liczba. Należy podać jak najmniejsza ilość monet potrzebna do wydania reszty. Przykład: Wydać 98 PLN, dysponujac nominałami: 50, 0, 0, 5,,. Rozwiazanie: Porzadkujemy nominały malejaco ze względu na ich wartości. Wydajemy następujaco: 50 - pozostało 48 0 - pozostało 8 0 - pozostało 8 5 - pozostało 3 - pozostało - pozostało 0 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 4 / 43

Algorytmy Zachłanne Algorytm: GREEDY-GIVE-CHANGE Założenie: c jest uporzadkowan a malejaco tablica nominałów, sum jest reszta do wydania, k jest liczba nominałów różnego rodzaju. GREEDY-GIVE-CHANGE (sum,c,k) : for i := 0 to k do : if (sum div c[i]) 0 then 3: change[i] := sum div c[i] 4: sum := sum mod c[i] 5: else 6: change[i] := 0 7: end if 8: end for 9: return change Do tablicy change wpisujemy największa możliwa liczbę nominału c k > c k >... > c 0. Jeżeli jakiegoś nominału nie można użyć do wydania określonej reszty, tzn. nie jest spełniony warunek (sum div c[i])!= 0, to do tablicy change wpisywana jest wartość zero - wiersz 6 algorytmu. Złożoność Θ(n). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 5 / 43

Algorytmy Zachłanne Problem wydawania reszt - uwagi Istnieja zbiory nominałów, dla których podany algorytm nie daje optymalnego rozwiazania. Przykład : Wydać 0PLN za pomoca nominałów, 5 i 6. Rozwiazanie algorytmu zachłannego: 6 + + + +, czyli 5 monet. Rozwiazanie optymalne: 5 + 5 Przykład : Wydać 66 PLN za pomoca nominałów 50, 0 i. Rozwiazanie algorytmu zachłannego: 50 + 6 *, czyli 7 nominałów. Rozwiazanie optymalne: 3* 0 + 6*, czyli 9 nominałów. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 6 / 43

Grafy z wagami Etykietowany graf skierowany Definicja Etykietowanym grafem skierowanym nazywamy strukturę G = (V, E, w : E R) gdzie V to zbiór wierzchołków, E {(u, v) : u, v V } to zbiór uporzadkowanych par wierzchołków ze zbioru V, zwanych krawędziami. w : E R jest funkcja wagi; wagi reprezentuja pewne wielkości (np. długość drogi). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Grafy z wagami Etykietowany graf skierowany - przykład F D B 3-3 E C 3 Macierz sasiedztwa: A B C D E F A 0 0 0 0 0 B 0 0-3 0 0 0 C 0 0 0 0 0 D 0 0 0 0 E 0 3 0 0 0 F 0 0 0 3 0 A B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 8 / 43

Grafy z wagami Etykietowany graf nieskierowany Definicja Etykietowanym grafem nieskierowanym nazywamy strukturę G = (V, E, w : E R) gdzie V to zbiór wierzchołków, E {{u, v} : u, v V } to zbiór par wierzchołków ze zbioru V, zwanych krawędziami. w : E R jest funkcja wagi; wagi reprezentuja pewne wielkości (np. długość drogi). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 9 / 43

Grafy z wagami Etykietowany graf skierowany - przykład F D B 3-3 E C 3 Macierz sasiedztwa: A B C D E F A 0 0 0 0 B 0-3 0 C -3 0 0 3 0 D 0 0 0 3 E 0 3 0 F 0 0 0 3 0 A B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 0 / 43

Definicja Drzewem rozpinajacym grafu G nazywamy spójny i acykliczny podgraf grafu G zawierajacy wszystkie jego wierzchołki. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Definicja Drzewem rozpinajacym grafu G nazywamy spójny i acykliczny podgraf grafu G zawierajacy wszystkie jego wierzchołki. Twierdzenie Każdy graf spójny zawiera drzewo rozpinajace. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Definicja Drzewem rozpinajacym grafu G nazywamy spójny i acykliczny podgraf grafu G zawierajacy wszystkie jego wierzchołki. Twierdzenie Każdy graf spójny zawiera drzewo rozpinajace. Twierdzenie W grafie spójnym G = (V, E) krawędź e E jest krawędzia cięcia wtedy i tylko wtedy, gdy e należy do każdego drzewa rozpinajacego grafu G. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Drzewa rozpinajace o minimalnej wadze Jeżeli mamy do czynienia z grafem z funkcja wagi, to najczęściej interesuje nas znalezienie drzewa rozpinajacego o minimalnej wadze, tzn., drzewa z najmniejsza suma wag jego krawędzi. Aby znaleźć drzewo o żadanych własnościach można zastosować dwa algorytmy: Kruskala Prima B. Woźna-Szcześniak (UJD) Algorytmy Grafowe / 43

Algorytmy Kruskala Algorytm jest oparty o metodę zachłanna i polega na łacze- niu wielu poddrzew w jedno za pomoca krawędzi o najmniej- szej wadze. Założenia: Zastosowanie struktury danych reprezentujacej zbiory rozłaczne do pamiętania kilku rozłacznych zbiorów wierzchołków. FIND-SET(U) zwraca reprezentanta zbioru zawierajacego wierzchołek u. UNION(U,V) - łaczy drzewa zawierajace u i v w jedno drzewo. Wejście: Spójny graf nieskierowany z funkcja wagi G = (V, E, w : E R). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 3 / 43

Algorytm Kruskala Require: KRUSKAL(G) : A = : for każdy wierzchołek v V [G] do 3: Make Set(v) 4: end for{utworzenie V drzew jednowierzchołkowych} 5: posortuj krawędzie z E niemalejaco względem wag. 6: for każda krawędź (u, v) E, w kolejności niemalejacych wag do 7: if FIND SET (u) FIND SET (v) then 8: A = A {(u, v)} 9: Union(u, v) 0: end if : end for B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 4 / 43

Algorytm Kruskala - Złożoność obliczeniowa Algorytm można podzielić na dwa etapy: w pierwszym etapie sortujemy krawędzie według wag w czasie O(m log(m)). w drugim etapie budujemy rozpięte drzewo poprzez wybór najkrótszych krawędzi ze zbioru krawędzi E(G); ten etap można wykonać w czasie O(m log(n)). Sumaryczny czas pracy algorytmu Kruskala wynosi: O(m log(n)) B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 5 / 43

Algorytm Kruskala - Przykład a f 7 4 b e 6 3 c d 8 Po posortowaniu krawędzi wg. wag otrzymujemy: ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 6 / 43

Algorytm Kruskala - Przykład Krok. a 4 b c Krok. a 4 b c f 7 e 3 d 8 f 7 e 3 d 8 ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 6 ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 6 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 7 / 43

Algorytm Kruskala - Przykład Krok 3. a 4 b c Krok 4 - scalenie. 4 a b c f 7 e 3 d 8 f 7 e 3 d 8 ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 6 ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 6 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 8 / 43

Algorytm Kruskala - Przykład Krok 5. a f 7 4 b e 6 3 c d 8 Minimalne drzewo. a b f e 3 c d ae=, af=, bc=, be=, de=3, ab=4, fd=6, ef=7, cd=8 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 9 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 30 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 3 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 3 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 33 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 34 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 35 / 43

Algorytm Kruskal -przykład Rysunek: Źródło:Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms. The MIT Press, 009. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 36 / 43

Algorytm Prima Algorytm został wynaleziony w 930 przez czeskiego matematyka Vojtěcha Jarníka, a następnie w 957 odkryty na nowo przez informatyka Roberta C. Prima oraz niezależnie w 959 przez Edsgera Dijkstrę. Z tego powodu algorytm nazywany jest również algorytmem Dijkstry-Prima, algorytmem Jarníka, albo algorytmem Prima-Jarníka. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 37 / 43

Algorytm Prima Budowę minimalnego drzewa rozpinajacego zaczynamy od dowolnego wierzchołka, np. od pierwszego. Dodajemy wierzchołek do drzewa, a wszystkie krawędzie incydentne umieszczamy na posortowanej wg. wag liście. Następnie zdejmujemy z listy pierwszy element (o najmniejszej wadze) i jeżeli wierzchołek, który łaczy nie należy do drzewa, dodajemy go do drzewa a na liście znów umieszczamy wszystkie krawędzie incydentne z wierzchołkiem, który dodaliśmy. Jednym zdaniem: zawsze dodajemy do drzewa krawędź o najmniejszej wadze, osiagaln a (w przeciwieństwie do Kruskala) z jakiegoś wierzchołka tego drzewa. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 38 / 43

Algorytm Prima - Przykład a 4 b c f 7 e 3 d 8 6 B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 39 / 43

Algorytm Prima - Przykład Krok. a f 7 4 b e 3 c d 8 Krok. a f 7 4 b e 3 c d 8 6 Wybieramy wierzchołek a. Tworzymy posortowana listę L=[a,e,],[a,f,],[a,b,4]. Wybieramy krawędź (a,e). 6 Dodajemy nowe krawędzie: L=[a,f,],[e,b,],[e,d,3],[a,b,4],[e,f,7]. Wybieramy krawędź (a,f). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 40 / 43

Algorytm Prima - Przykład Krok 3. a 4 b c Krok 4 a 4 b c f 7 e 3 d 8 f 7 e 3 d 8 6 Krawędź [f,e,7] jest już na liście: L=[e,b,],[e,d,3],[a,b,4],[f,d,6],[e,f,7]. Wybieramy krawędź (e,b). 6 Dodajemy krawędź [b,c,]: L=[b,c,],[e,d,3],[a,b,4],[f,d,6],[e,f,7] Wybieramy krawędź (b,c). B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 4 / 43

Algorytm Prima - Przykład Krok 5. a f 7 4 b e 6 3 c d 8 Minimalne Drzewo a b f e 3 c d Dodajemy krawędź [c,d,8]: L=[e,d,3],[a,b,4],[f,d,6],[e,f,7],[c,d,8] Wybieramy krawędź (e,d). Drzewo utworzone. B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 4 / 43

Algorytm Prima a Algorytm Kruskala - Przykład Minimalne Drzewo wg. Algorytmu Kruskala. a b c Minimalne Drzewo wg. Algorytmu Prima a b c f e 3 d f e 3 d B. Woźna-Szcześniak (UJD) Algorytmy Grafowe 43 / 43