• Nie Znaleziono Wyników

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność Algorytmy Grafowe Rozdział 2. Minimalne drzewa rozpięte.

N/A
N/A
Protected

Academic year: 2022

Share "Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność Algorytmy Grafowe Rozdział 2. Minimalne drzewa rozpięte."

Copied!
24
0
0

Pełen tekst

(1)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytmy Grafowe

Rozdział 2. Minimalne drzewa rozpięte.

Katarzyna Rybarczyk-Krzywdzińska

(2)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Minimalne drzewa rozpięte

Drzewa – definicje

Definicja

Lasemnazywamy graf bez cykli (jako podgrafów).

Definicja

Drzewemnazywamy spójny las.

Definicja

Drzewem rozpiętymgrafu G nazywamy podgraf H grafu G , który jest drzewem i dla którego V (H) = V (G ).

Przykład:

(3)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Minimalne drzewa rozpięte

Drzewa – własności

Twierdzenie Własności drzew:

W drzewie każda krawędź jest krawędzią cięcia.

Drzewo na n wierzchołkach ma n − 1 krawędzi.

Każde nietrywialne drzewo (o co najmniej 2 wierzchołkach) ma co najmniej dwa wierzchołki wiszące (z których wychodzi tylko jedna krawędź).

Każdy graf spójny ma drzewo rozpięte.

Uzasadnienie:

(4)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Minimalne drzewa rozpięte

Drzewa z wagami

Definicja

Wagą drzewaz wagami T o funkcji wag w nazywamy sumę wag jego krawędzi:

w (T ) = X

e∈E (T )

w (e).

Definicja

Minimalnym drzewem rozpiętym (MST)spójnego grafu G nazywamy drzewo rozpięte T o najmniejszej wadze.

Przykład:

(5)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Minimalne drzewa rozpięte

Zastosowania:

rozsyłanie (np. informacji) w sieciach, w których połączenia mają różny „koszt” przekazu (wyznacza sieć połączeń, które minimalizują koszt przekazu);

pomoc przy aproksymacji niektórych problemów klasy NP (np.

problem podróżującego komiwojażera – o tym niebawem);

analiza skupień (cluster analysis);

rozpoznawanie obrazów;

...

(6)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Minimalne drzewa rozpięte

Zastosowania:

Pewna osada ma ograniczone zasoby finansowe i wszystkie drogi w tragicznym stanie. Które z dróg powinny zastać naprawione, aby zapewnić dojazd wyremontowanymi drogami do każdego istotnego punktu osady i zminimalizować koszty?

(7)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

Działanie algorytmu Kruskala:

W każdym kroku wybieramy w grafie G = (V , E ) nową krawędź o najmniejszej wadze (jeśli jest ich kilka to wybieramy dowolną z nich).

Jeżeli krawędź nie zamyka żadnego cyklu to dodajemy ją do lasu, w przeciwnym razie odrzucamy.

Proces kontynuujemy do momentu, aż wybierzemy |V | − 1 krawędzi, które utworzą rozpięte drzewo grafu.

Do szybkiego rozpoznawania, czy krawędź zamyka cykl możemy wykorzystać technikę z atrybutami wierzchołkówKorzeń

.

(8)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

Działanie algorytmu Kruskala:

W każdym kroku wybieramy w grafie G = (V , E ) nową krawędź o najmniejszej wadze (jeśli jest ich kilka to wybieramy dowolną z nich).

Jeżeli krawędź nie zamyka żadnego cyklu to dodajemy ją do lasu, w przeciwnym razie odrzucamy.

Proces kontynuujemy do momentu, aż wybierzemy |V | − 1 krawędzi, które utworzą rozpięte drzewo grafu.

Do szybkiego rozpoznawania, czy krawędź zamyka cykl możemy wykorzystać technikę z atrybutami wierzchołkówKorzeń

.

(9)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

Działanie algorytmu Kruskala:

W każdym kroku wybieramy w grafie G = (V , E ) nową krawędź o najmniejszej wadze (jeśli jest ich kilka to wybieramy dowolną z nich).

Jeżeli krawędź nie zamyka żadnego cyklu to dodajemy ją do lasu, w przeciwnym razie odrzucamy.

Proces kontynuujemy do momentu, aż wybierzemy |V | − 1 krawędzi, które utworzą rozpięte drzewo grafu.

Do szybkiego rozpoznawania, czy krawędź zamyka cykl możemy wykorzystać technikę z atrybutami wierzchołkówKorzeń

.

(10)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

Działanie algorytmu Kruskala:

W każdym kroku wybieramy w grafie G = (V , E ) nową krawędź o najmniejszej wadze (jeśli jest ich kilka to wybieramy dowolną z nich).

Jeżeli krawędź nie zamyka żadnego cyklu to dodajemy ją do lasu, w przeciwnym razie odrzucamy.

Proces kontynuujemy do momentu, aż wybierzemy |V | − 1 krawędzi, które utworzą rozpięte drzewo grafu.

Do szybkiego rozpoznawania, czy krawędź zamyka cykl możemy wykorzystać technikę z atrybutami wierzchołkówKorzeń.

(11)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność Algorytm Kruskala

Algorytm Kruskala - przykład

(12)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

1 Wybierz krawędź e1, która nie jest pętlą, tak, by waga tej krawędzi była najmniejsza.

2 Jeżeli krawędzie e1, e2, . . . , ek zostały już wybrane, to z pozostałych E \ {e1, e2, . . . , ek} wybierz krawędź ek+1 w taki sposób aby:

a. waga krawędzi ek+1 była najmniejsza oraz

b. graf, który składa się tylko z krawędzi e1, e2, . . . , ek, ek+1 był acykliczny (możemy tu zastosować etykietowanie związane z korzeniami drzew lasu).

3 Jeśli nie można wykonać kroku 2, to STOP (dla grafu

spójnego: gdy wybrałeś już |V | − 1 krawędzi lub gdy wszystkie wierzchołki mają ten sam korzeń).

(13)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

1 Wybierz krawędź e1, która nie jest pętlą, tak, by waga tej krawędzi była najmniejsza.

2 Jeżeli krawędzie e1, e2, . . . , ek zostały już wybrane, to z pozostałych E \ {e1, e2, . . . , ek} wybierz krawędź ek+1 w taki sposób aby:

a. waga krawędzi ek+1 była najmniejsza oraz

b. graf, który składa się tylko z krawędzi e1, e2, . . . , ek, ek+1 był acykliczny (możemy tu zastosować etykietowanie związane z korzeniami drzew lasu).

3 Jeśli nie można wykonać kroku 2, to STOP (dla grafu

spójnego: gdy wybrałeś już |V | − 1 krawędzi lub gdy wszystkie wierzchołki mają ten sam korzeń).

(14)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

1 Wybierz krawędź e1, która nie jest pętlą, tak, by waga tej krawędzi była najmniejsza.

2 Jeżeli krawędzie e1, e2, . . . , ek zostały już wybrane, to z pozostałych E \ {e1, e2, . . . , ek} wybierz krawędź ek+1 w taki sposób aby:

a. waga krawędzi ek+1 była najmniejsza oraz

b. graf, który składa się tylko z krawędzi e1, e2, . . . , ek, ek+1 był acykliczny (możemy tu zastosować etykietowanie związane z korzeniami drzew lasu).

3 Jeśli nie można wykonać kroku 2, to STOP (dla grafu

spójnego: gdy wybrałeś już |V | − 1 krawędzi lub gdy wszystkie wierzchołki mają ten sam korzeń).

(15)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

1 Wybierz krawędź e1, która nie jest pętlą, tak, by waga tej krawędzi była najmniejsza.

2 Jeżeli krawędzie e1, e2, . . . , ek zostały już wybrane, to z pozostałych E \ {e1, e2, . . . , ek} wybierz krawędź ek+1 w taki sposób aby:

a. waga krawędzi ek+1 była najmniejsza oraz

b. graf, który składa się tylko z krawędzi e1, e2, . . . , ek, ek+1 był acykliczny (możemy tu zastosować etykietowanie związane z korzeniami drzew lasu).

3 Jeśli nie można wykonać kroku 2, to STOP (dla grafu

spójnego: gdy wybrałeś już |V | − 1 krawędzi lub gdy wszystkie wierzchołki mają ten sam korzeń).

(16)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Algorytm Kruskala

1 Wybierz krawędź e1, która nie jest pętlą, tak, by waga tej krawędzi była najmniejsza.

2 Jeżeli krawędzie e1, e2, . . . , ek zostały już wybrane, to z pozostałych E \ {e1, e2, . . . , ek} wybierz krawędź ek+1 w taki sposób aby:

a. waga krawędzi ek+1 była najmniejsza oraz

b. graf, który składa się tylko z krawędzi e1, e2, . . . , ek, ek+1 był acykliczny (możemy tu zastosować etykietowanie związane z korzeniami drzew lasu).

3 Jeśli nie można wykonać kroku 2, to STOP (dla grafu

spójnego: gdy wybrałeś już |V | − 1 krawędzi lub gdy wszystkie wierzchołki mają ten sam korzeń).

(17)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Kruskala

Procedura nawadnia korzeni w algorytmie Kruskala:

1 Na początku każdemu wierzchołkowi v nadajemy korzeń r (v ) = v ;

2 Gdy rozważamy krawędź vw :

jeżeli r (v ) = r (w ), to krawędź vw zamyka cykl;

jeżeli r (v ) 6= r (w ) (krawędź vw nie zamyka cyklu), w algorytmie Kruskala łączymy drzewa o korzeniach r (v ) i r (w ) krawędzią vw , zatem nadajemy wszystkim wierzchołkom o korzeniu r (w ) nowy korzeń r (v ).

(18)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Prima

Algorytm Prima

W trakcie działania algorytmu budujemy drzewo zaczynając od pewnego wierzchołka s.

W każdym kroku dla każdego wierzchołka v połączonego krawędzią z budowanym drzewem mamy zapisane:

wagę „najlżejszej” krawędzi łączącej v z drzewem (β(v ));

wierzchołek tej krawędzi należący do drzewa (α(v ))

Następnie wybieramy wierzchołek v z poza drzewa położony

„najbliżej” budowanego drzewa (o najmniejszym β(v )) i dodajemy go do drzewa (dodajemy krawędź α(v )v).

(19)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność Algorytm Prima

Algorytm Prima - przykład

(20)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Prima

Algorytm Prima

1 Wybrać s – dowolny wierzchołek grafu G = (V , E ).

Przypisać s etykiety: (α(s), β(s)) = (None, 0).

T := ∅ – zbiór wierzchołków budowanego drzewa;

Pozostałym wierzchołkom v przypisać etykiety (α(v ), β(v )) = (None, ∞)

α(v ) – aktualny poprzednik wierzchołka w budowanym drzewie β(v ) – waga krawędzi wiodącej do aktualnego poprzednika.

2 Powtarzamy

Wybrać wierzchołek v taki, że β(v ) = min

u /∈Tβ(u) T := T ∪ {v }. Jeżeli |T | = |V |, to STOP.

Wszystkim wierzchołkom u przyległym do v , które nie należą do T i dla których zachodzi nierówność

β(u) > w (v , u) zmieniamy etykiety

α(u) := v , β(u) := w (v , u).

(21)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Prima

Algorytm Prima

1

2 Powtarzamy

Wybrać wierzchołek v taki, że

β(v ) = min

u /∈Tβ(u)

T := T ∪ {v }. Jeżeli |T | = |V |, to STOP.

Wszystkim wierzchołkom u przyległym do v , które nie należą do T i dla których zachodzi nierówność

β(u) > w (v , u) zmieniamy etykiety

α(u) := v , β(u) := w (v , u).

(22)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Algorytm Prima

Algorytm Prima

Odczytanie krawędzi drzewa z etykiet:

α(v ) – aktualny poprzednik wierzchołka w budowanym drzewie β(v ) – waga krawędzi wiodącej do aktualnego poprzednika.

Dla v 6= s, każda para {α(v ), v } jest krawędzią drzewa.

(23)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Poprawność i złożoność

Dowód poprawności - wstęp

Definicja

Niech G = (V , E ) będzie grafem, S V , S 6= ∅.Cięciem

e(S , V \ S )grafu G nazywamy zbiór krawędzi o jednym końcu w S a drugim w S \ V .

e(S , V \ S ) = {{v , w } ∈ E (G ) : v ∈ S , w ∈ V \ S }

Definicja

W grafie z wagami G krawędź e ∈ e(S , V \ S ) jestlekka, jeśli jej waga jest najmniejsza spośród wag krawędzi z e(S , V \ S ).

UWAGA: Cięcie może zawierać więcej niż jedną lekką krawędź.

(24)

Minimalne drzewa rozpięte Algorytm Kruskala Algorytm Prima Poprawność i złożoność

Poprawność i złożoność

Dowód poprawności - lemat

Lemat Niech

G będzie spójnym grafem z wagami grafem;

A ⊆ E (T ) dla pewnego minimalnego drzewa rozpiętego T grafu G ;

e(S , V \ S ) będzie cięciem, które nie zawiera żadnej krawędzi z A;

e ∈ e(S , V \ S ) będzie lekką krawędzią z e(S , V \ S ).

Wtedy A ∪ {e} jest zawarte w pewnym minimalnym drzewie rozpiętym grafu G .

UWAGA: minimalne drzewo rozpięte z tezy nie musi być tym samym minimalnym drzewem rozpiętym T z założeń.

DOWÓD:

Cytaty

Powiązane dokumenty

Mamy dany graf F nieskierowany spójny (tzn. że każdej krawędzi można dotrzeć do innej krawędzi) z wagami (tzn.. z krawędziami z

Polega on na znalezienu ´scie· zki o najmniejszej wadze (sumie wag kraw¾ edzi) mi ¾ edzy ustalonymi wierz- cho÷ kami grafu wa· zonego.... W dalszej cz ¾ e´sci wyk÷ adu

Choc poszukiwanie minimalnej s ciez ki kojarzy się zazwyczaj z analizą lub syntezą ro z norodnych sieci transportowych, zakres jego praktycznego wykorzystania jest znacznie

W informatyce drzewo binarne jest strukturą danych, w której każdy węzeł ma co najwyżej dwa węzły podrzędne, zwykle rozpoznawane jako "lewy" i "prawy"..

W ten sposób więc koherencja systemu okazuje si ę jedynie złudzeniem, w istocie rozsadzają go wewn ętrzne sprzeczności i niekonsekwencje: „Autobiografia – konkluduje de Man

Funkcja connect() nie może być ponawiana bez uprzedniego otworzenia nowego gniazda. Przebieg współpracy z serwerem określa protokół komunikacji. TCP jest protokołem

logiczne na terenie Polski: wschodnią, zachodnią i dzielący je wąski pas w obrębie brzegu płyty. Obniżanie to jest nieregularne, na ogół bardzo powolne. Na

Liczba drzew rozpiętych grafu Algorytm generujący wszystkie drzewa rozpięte..