60
Graf skierowany (digraf)zbiór wierzchołków i zbiór krawędzi skierowanych łączących (co najwyżej jeden raz) uporządkowane pary wierzchołków. Mówimy wtedy, że krawędź łączy pierwszy wierzchołek z drugim (albo, że prowadzi od pierwszego wierzchołka do drugiego). Digraf o V wierzchołkach posiada V 2 krawędzi, zatem liczba różnych digrafów o V wierzchołkach wynosi 2 VxV Nie dopuszczamy krawędzi wielokrotnych, ale przyjmujemy, że każdy wierzchołek ma jedną pętlę

Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Graf skierowany (digraf)– zbiór wierzchołków i zbiór krawędzi

skierowanych łączących (co najwyżej jeden raz)

uporządkowane pary wierzchołków. Mówimy wtedy, że

krawędź łączy pierwszy wierzchołek z drugim (albo, że

prowadzi od pierwszego wierzchołka do drugiego).

Digraf o V wierzchołkach posiada V2 krawędzi, zatem liczba

różnych digrafów o V wierzchołkach wynosi 2VxV

Nie dopuszczamy krawędzi wielokrotnych, ale przyjmujemy, że każdy wierzchołek ma jedną pętlę

Page 2: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Ścieżka skierowana– ciąg wierzchołków, w którym każdy jest

połączony krawędzią ze swoim następnikiem. Mówimy, że

wierzchołek t jest osiągalny z s, jeśli istnieje ścieżka

skierowana z s do t.

Page 3: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Przykład grafu skierowanego

Lista wierzchołków i krawędzi

Page 4: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Reprezentacja dla digrafów jest taka sama jak dla grafów nieskierowanych

0 1 2 3 4 5 6 7 8 9 10 11 12

0 1 1 0 0 0 1 1 0 0 0 0 0 0

1 0 1 0 0 0 0 0 0 0 0 0 0 0

2 1 0 1 1 0 0 0 0 0 0 0 0 0

3 0 0 1 1 0 1 0 0 0 0 0 0 0

4 0 0 1 1 1 0 0 0 0 0 0 1 0

5 0 0 0 0 1 1 0 0 0 0 0 0 0

6 0 0 0 0 1 0 1 0 0 1 0 0 0

7 0 0 0 0 0 0 1 1 1 0 0 0 0

8 0 0 0 0 0 0 0 1 1 1 0 0 0

9 0 0 0 0 0 0 0 0 0 1 1 1 0

10 0 0 0 0 0 0 0 0 0 0 1 0 1

11 0 0 0 0 0 0 0 0 0 0 0 1 1

12 0 0 0 0 0 0 0 0 0 1 0 0 1

Macierz sąsiedztwa

Page 5: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Lista sąsiedztwa

Page 6: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jeśli każdy wierzchołek digrafu posiada pętlę oraz każdej krawędzie skierowanej odpowiada krawędź w przeciwną stronę, nie ma różnicy pomiędzy reprezentacjami grafów skierowanych i nieskierowanych.

Page 7: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Stopień wejściowy (indegree) wierzchołka, to liczba krawędzi wychodzących z tego wierzchołka, a stopień wyjściowy (outdegree) wierzchołka, to liczba krawędzi wychodzących z tego wierzchołka.

Żaden wierzchołek nie jest osiągany z wierzchołka o stopniu wejściowym 0, zwanego ujściem.

Wierzchołek o stopniu wejściowym 0, zwany źródłem, nie jest osiągany z żadnego innego wierzchołka.

Page 8: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Stopień wejściowy (indegree) wierzchołka, to liczba krawędzi wychodzących z tego wierzchołka, a stopień wyjściowy (outdegree) wierzchołka, to liczba krawędzi wychodzących z tego wierzchołka.

Żaden wierzchołek nie jest osiągany z wierzchołka o stopniu wejściowym 0, zwanego ujściem.

Wierzchołek o stopniu wejściowym 0, zwany źródłem, nie jest osiągany z żadnego innego wierzchołka.

n, m – ilość wierzchołków i krawędzi

Page 9: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 10: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Odwrotnością digrafu nazywamy digraf otrzymany przez odwrócenie kierunków wszystkich krawędzi.

Odwrotności używamy wtedy, kiedy chcemy wiedzieć, skąd krawędzie przychodzą.

Page 11: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Reprezentacja macierzowa a odwrotność digrafu

Tworzymy kopię macierzy i transponujemy ją (czyli zamieniamy wiersze z kolumnami)

Albo

Jeżeli wiemy, że graf nie będzie modyfikowany – zamieniamy miejscami końce krawędzi przy odwołaniach do nich, np. krawędź s-tjest oznaczona 1 w adj[s][t], a w odwrotności grafu 1 byłaby w adj[t][s]. Zatem, jeśli wywołujemy edge(s, t), to w odwrotności wystarczy wywołać edge(t,s ) .

Albo

Utrzymujemy dwie reprezentacje każdej krawędzi skierowanej, ale z dodatkowym bitem informacji określającym kierunek

Page 12: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

template <class inGraph, class outGraph>

void reverse(const inGraph &G, outGraph &R)

{

for(int v = 0; v < G.V(); v++)

{

typename inGraph::adjIterator A(G,v);

for (int w = A.beg(); !A.end(); w = A.nxt())

R.insert(Edge(w, v));

}

}

Odwracanie digrafu – funkcja dodaje odwrócone krawędzie digrafu wskazanego przez pierwszy argument do digrafuz drugiego argumentu.

Page 13: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Dag – skierowany graf acykliczny, czyli digraf bez cykli skierowanych.

Page 14: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Digraf jest silnie spójny, jeśli każdy jego wierzchołek jest osiągalny z dowolnego innego.

Dwa wierzchołki w digrafie s i t są silnie połączone, jeśli istnieje ścieżka skierowana z s do t i z t do s.

Własność 1.Digraf, który nie jest silnie spójny, składa się ze zbioru silnie spójnych składowych (silnych składowych), będących maksymalnymi podgrafami silnie spójnymi oraz ze zbioru krawędzi pomiędzy silnymi składowymi.

Page 15: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Definicja.

Dla danego digrafu D, określamy digraf K(D) o własnościach:•każdy wierzchołek odpowiada jednej silnej składowej w D,•każda krawędź odpowiada zbiorowi krawędzi w D, łączących wierzchołki pomiędzy właściwymi składowymi (odpowiadającymi obu końcom krawędzi z K(D)).

Wówczas K(D) jest dagiem, który nazywamy jądrem digrafu D

Ten digraf ma 4 silne składowe

składowe

Jądro digrafu

Page 16: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jakie problemy mogą pojawiać się w digrafach?

Wykrywanie cykli skierowanych – czy digraf posiada cykle skierowane (czy jest dagiem)?

WłasnośćDigraf jest dagiem wtedy i tylko wtedy, gdy - podczas sprawdzania go algorytmem przeszukiwania w głąb –nie napotkamy krawędzi powrotnych

Osiągalność z pojedynczego źródła – jakie wierzchołki są osiągane z danego wierzchołka początkowego s, ile jest takich wierzchołków?

Własność.Problem osiągalności z pojedynczego źródła s można rozwiązać za pomocą algorytmu przeszukiwania w głąb rozpoczętego w wierzchołku s w czasie proporcjonalnym do liczby krawędzi podgrafuindukowanego przez wierzchołki osiągalne z s.

Page 17: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Pozostaje rozważyć algorytm przeszukiwania w głąb DFS, czyli Depth-First-Search (jest również algorytm przeszukiwania wszerz – BSF) grafu.

Zaczniemy od grafu nieskierowanego.

Idea jest podobna do przechodzenia przez drzewo w kolejności pre-order (najpierw rodzic, a potem rekursywnie - dzieci)

Page 18: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Pozostaje rozważyć algorytm przeszukiwania w głąb DFS, czyli Depth-First-Search (jest również algorytm przeszukiwania wszerz – BSF) grafu.

Zaczniemy od grafu nieskierowanego.

Idea jest podobna do przechodzenia przez drzewo w kolejności pre-order (najpierw rodzic, a potem rekursywnie - dzieci)

Algorytm odwiedza sąsiadów korzystając z rekurencji.Wędrując z u do v, rekurencyjnie odwiedzamy wszystkich sąsiadów v do tej pory nieodwiedzonych, potem wracamy do u.

Możliwe jest, że w2 nie był odwiedzany, kiedy rekurencyjnie odwiedzaliśmy w1, ale zostanie odwiedzony w czasie, gdy powrócimy z wywołania rekurencyjnego.

Page 19: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Fragment algorytmu zapisany w pseudokodzie.

Page 20: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jak to działa?

Co było poprzednikiem?

Page 21: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 22: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 23: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 24: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 25: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 26: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór
Page 27: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

RDS(7) kończy, bo już nie ma nieodwiedzonych sąsiadów.

Page 28: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jak tym algorytmem znajdywać ścieżkę?

Page 29: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Otrzymujemy w ten sposób drzewo ścieżek DFS

Page 30: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Złożoność czasowa DFS z zastosowaniem list sąsiedztwa:

Nigdy nie odwiedzamy wierzchołka więcej niż raz.

Sprawdzamy zatem wszystkie wierzchołki grafu (wiemy, że suma stopni wszystkich wierzchołków jest równa 2E.

Dla każdego wierzchołka zabiera to czas proporcjonalny do stopnia wierzchołka +1.

Stąd czas wykonania DFS jest proporcjonalny do sumy ilości wierzchołków i krawędzi, czyli O(V+E).

Page 31: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Złożoność czasowa DFS z zastosowaniem macierzy sąsiedztwa:

Czas wykonania DFS jest proporcjonalny do kwadratu ilości wierzchołków, czyli O(V2).

Wniosek:

Czas działania algorytmu DFS jest liniowy względem rozmiaru struktury danych użytej do reprezentowania grafu.

Page 32: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Możemy wzbogacić rysunek drzewa dla algorytmu DFS, aby uzyskać więcej informacji.

Dwie reprezentacja każdej przetwarzanej krawędzi ( w obu kierunkach)

Jedna reprezentacja każdej przetwarzanej krawędzi

Algorytm bada wszystkie krawędzie

Drzewo DFS jest innym sposobem przedstawienia

grafu

Page 33: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Krawędź do jeszcze nie odwiedzonego wierzchołka DFS napotkał krawędź

prowadzącą do wierzchołka już odwiedzonego

Prowadzą do wierzchołków, dla których DFS jest w trakcie wywołania rekurencyjnego

Obejście drzewa w porządku prefiksowym jest takie samo jak kolejność badania krawędzi grafu przez DFS

Page 34: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Krawędź do jeszcze nie odwiedzonego wierzchołka DFS napotkał krawędź

prowadzącą do wierzchołka już odwiedzonego

Prowadzą do wierzchołków, dla których DFS jest w trakcie wywołania rekurencyjnego

Obejście drzewa w porządku prefiksowym jest takie samo jak kolejność badania krawędzi grafu przez DFS

Jeśli w grafie po lewej usuniemy szare wierzchołki (środkowy rysunek) i zastąpimy wierzchołki zewnętrzne krawędziami, to otrzymamy na powrót wyjściowy graf (prawy rysunek)

Page 35: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Krawędzie

Drzewowe – reprezentują wywołania rekurencyjne

Powrotne – łączą wierzchołki z ich przodkami nie będącymi ich ojcami w drzewie DFS

Gałąź drzewowa –krawędź z wierzchołka v do w, jeśli w jest nienaznaczony

Gałąź do ojca –krawędź z wierzchołka v do w, jeśli wskaźnik na ojca w jest równy v

Gałąź powrotna –krawędź z wierzchołka v do w, jeśli numer w porządku prefiksowym w jest mniejszy niż numer w porządku prefiksowym v

Gałąź zstępująca –krawędź z wierzchołka v do w, jeśli numer w porządku prefiksowym w jest większy niż numer w porządku prefiksowym v

Page 36: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jeśli graf nie jest spójny, to dynamikę przeszukiwania DFS można opisać za pomocą lasu DFS, zawierającym po jednym drzewie dla każdej składowej spójnej.

Używając reprezentacji grafu w postaci list sąsiedztwa odwiedzamy krawędzie w innej kolejności, niż wtedy, gdy użyjemy reprezentacji grafu w postaci macierzy sąsiedztwa.

Page 37: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Las DFS odpowiada przeszukiwaniu w głąb grafu reprezentowanego w postaci macierzy sąsiedztwa. Graf posiada 3 składowe spójne, więc las zawiera 3 drzewa. Do okrągłych wierzchołków prowadzą krawędzie drzewa, do kwadratowych –krawędzie powrotne. Szary kolor wskazuje, że krawędzie do tych wierzchołków zostały już wcześniej napotkane w odwrotnej orientacji.

Page 38: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Las DFS odpowiada przeszukiwaniu w głąb grafu reprezentowanego w postaci listy sąsiedztwa. Graf posiada 3 składowe spójne, więc las zawiera 3 drzewa. Do okrągłych wierzchołków prowadzą krawędzie drzewa, do kwadratowych –krawędzie powrotne. Szary kolor wskazuje, że krawędzie do tych wierzchołków zostały już wcześniej napotkane w odwrotnej orientacji.

Page 39: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Klasyfikacja krawędzi dla digrafów:

Krawędzie drzewowe – krawędzie reprezentujące wywołania rekurencyjne

Krawędzie powrotne – krawędzie prowadzące do przodka danego wierzchołka w drzewie DFS

Krawędzie zstępujące – krawędzie do potomka danego wierzchołka w drzewie DFS

Krawędzie poprzeczne – pozostałe krawędzie (nie prowadzą ani do potomka, ani do przodka w drzewie DFS)

Page 40: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Las DFS dla digrafu reprezentowanego za pomocą list sąsiedztwa

Zewnętrzne węzły reprezentują wierzchołki już odwiedzone, pozostała część lasu jest digrafem o wszystkich krawędziach biegnących w dół.

Page 41: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Las DFS dla digrafu reprezentowanego za pomocą list sąsiedztwa

Zewnętrzne węzły reprezentują wierzchołki już odwiedzone, pozostała część lasu jest digrafem o wszystkich krawędziach biegnących w dół.

Krawędź drzewowa do węzła wewnętrznego

Krawędź powrotna

Krawędź zstępująca

Krawędź poprzeczna

Page 42: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Własność.

W lesie DFS dla digrafu krawędź do odwiedzanego węzła jest

krawędzią powrotną, jeśli prowadzi do węzła o wyższym numerze postfiksowym

krawędzią poprzeczną, jeśli prowadzi do węzła o niższym numerze prefiksowym

krawędzią zstępującą, jeśli prowadzi do węzła o wyższym numerze prefiksowym

Page 43: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Lasy DFS dla tego samego digrafu mogą się znacznie różnić – np. liczba drzew lasu DFS zależy od wyboru wierzchołka początkowego.

Page 44: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Czy digraf posiada cykle skierowane (czy digraf jest dagiem)?

W grafach nieskierowanych każda krawędź do odwiedzanego wierzchołka wskazuje na istnienie cyklu, w digrafach trzeba rozważać krawędzie powrotne.

Własność.

Digraf jest dagiem wtedy i tylko wtedy, gdy – podczas badania za pomocą DFS każdej krawędzi – nie napotkamy krawędzi powrotnych.

Page 45: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Dowód.

Każda krawędź powrotna należy do cyklu skierowanego zawierającego samą

krawędź oraz ścieżkę w drzewie łączącą oba węzły, nie znajdziemy więc

krawędzi powrotnych, przeszukując dag za pomocą DFS.

W drugą stronę: wystarczy pokazać, że jeśli digraf posiada cykl, to DFS

napotka krawędź powrotną. Jeśli v jest pierwszym wierzchołkiem cyklu

odwiedzonym przez DFS, to wierzchołek ten ma najniższy numer prefiksowy

spośród wszystkich krawędzi cyklu. Krawędź cyklu prowadząca do tego

wierzchołka będzie więc krawędzią powrtoną: zostanie ona napotkana

podczas wywołania rekurencyjnego z vi będzie prowadzić od pewnego węzła

cyklu do węzła o niższym numerze prefiksowym.

Page 46: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Głównym celem DFS jest systematyczne odwiedzenie wszystkich wierzchołków i krawędzi

Jakie wierzchołki są osiągane z danego wierzchołka początkowego s? Ile jest takich wierzchołków?

Problem osiągalności z pojedynczego źródła

Page 47: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Głównym celem DFS jest systematyczne odwiedzenie wszystkich wierzchołków i krawędzi

Jakie wierzchołki są osiągane z danego wierzchołka początkowego s? Ile jest takich wierzchołków?

Problem osiągalności z pojedynczego źródła

Własność

Problem osiągalności z pojedynczego źródła s można rozwiązać za pomocą DFS rozpoczętego w wierzchołku s w czasie proporcjonalnym do liczby krawędzi podgrafu indukowanego przez wierzchołki osiągane z s.

Page 48: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Dowód.

Własność ta jest prawdziwa dla grafu z jednym wierzchołkiem bez krawędzi.

Dla dowolnego digrafu przeprowadzamy dowód indukcyjnie. Zakładamy, że

własność zachodzi dla wszystkich digrafów o mniejszej liczbie wierzchołków.

Wtedy pierwsza wzięta pod uwagę krawędź s dzieli digraf na podgrafy

indukowane przez dwa zbiory wierzchołków:

a) Wierzchołki możliwe do osiągnięcia po ścieżkach skierowanych

niezawierających s i rozpoczynających się tą krawędzią

b) Wierzchołki, do których nie da się dojść po ścieżkach skierowanych

niezawierających s i rozpoczynających się tą krawędzią.

Do tych podgrafów stosujemy założenie indukcyjne – nie ma krawędzi z

wierzchołków pierwszego podgrafu do innych niż s wierzchołków drugiego

podgrafu. Krawędzie do s zostaną zignorowane, ponieważ wierzchołek s ma

najniższy numer prefiksowy oraz wszystkie wierzchołki pierwszego podgrafu mają

niższy numer prefiksowy niż dowolny wierzchołek drugiego podgrafu. Zatem

wszystkie krawędzie z wierzchołków drugiego podgrafu wierzchołków pierwszego

podgrafu zostaną pominięte.

Page 49: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Definicja

Domknięciem przechodnim digrafu nazywamy digraf o tym samym

zbiorze wierzchołków, dla którego krawędź z wierzchołka s do t

istnieje wtedy i tylko wtedy, gdy w digrafie wyjściowym istnieje ścieżka

skierowana z s do t.

W domknięciu przechodnim z każdego wierzchołka wychodzą krawędzie do wszystkich osiągalnych z niego wierzchołków

Page 50: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Definicja

Domknięciem przechodnim digrafu nazywamy digraf o tym samym

zbiorze wierzchołków, dla którego krawędź z wierzchołka s do t

istnieje wtedy i tylko wtedy, gdy w digrafie wyjściowym istnieje ścieżka

skierowana z s do t.

W domknięciu przechodnim z każdego wierzchołka wychodzą krawędzie do wszystkich osiągalnych z niego wierzchołków

Własność

Domknięcie przechodnie digrafu można wyznaczyć, konstruując

dla niego macierz sąsiedztwa A, dodając pętlę dla każdego

wierzchołka , a następnie obliczając AV

Page 51: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

AV=A*A*A*…*A – mnożenie boolowskie macierzy boolowskiej przez siebie V razy.

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

for(i = 0; C[s][t] = 0; i < V; i++)

C[s][t] += A[s][i]*B[i][t];

C=A*B

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

for(i = 0; C[s][t] = 0; i < V; i++)

if(A[s][i] && B[i][t]) C[s][t]= 1;

+ or* andmnożenie macierzy boolowskich

Page 52: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

AV=A*A*A*…*A – mnożenie boolowskie macierzy boolowskiej przez siebie V razy.

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

for(i = 0; C[s][t] = 0; i < V; i++)

C[s][t] += A[s][i]*B[i][t];

C=A*B

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

for(i = 0; C[s][t] = 0; i < V; i++)

if(A[s][i] && B[i][t]) C[s][t]= 1;

+ or* andmnożenie macierzy boolowskich

C=A*A=A2 – dla każdej pary wierzchołków s i t, w C znajduje się krawędź z s do t wtedy i tylko wtedy, gdy mażna wskazać wierzchołek i, dla którego w A istnieją krawędzie z s do i oraz z i do t.

Krawędzie w A2 odpowiadają ścieżkom skierowanym o długości 2 w A. Jeśli do każdego wierzchołka dołączymy pętlę, to A2 zawiera także wszystkie krawędzie z A.

Page 53: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Własność

Domknięcie przechodnie digrafu można wyznaczyć, konstruując

dla niego macierz sąsiedztwa A, dodając pętlę dla każdego

wierzchołka , a następnie obliczając AV

Dowód.

Opierając się na poprzednim rozumowaniu, pokazuje się, że A3 zawiera

krawędzie odpowiadające ścieżkom o długości nie większej niż 3, A4 – o

długości nie większej niż 4, itd. Ścieżki o długości większej niż V można

pominąć, bo z zasady szufladkowej Dirichleta wynika, że na takiej

ścieżce przynajmniej jeden wierzchołek musi wystąpić dwukrotnie

(mamy ich tylko V). Taka ścieżka nie wnosi nic nowego do domknięcia

przechodniego, ponieważ istnieje krótsze połączenie pomiędzy jej

dwoma końcami

Page 54: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Złożoność czasowa:Mamy: V mnożeń macierzy, każde o czasie wykonania rzędu V3, zatem wychodzi nam V4.Dla mnożeń boolowskich mamy lg V operacji mnożenia macierzy, bo liczymy kolejno A2, A4, A8, …, aż wykładnik będzie większy bądź równy V.

Stąd mamy V3lg V=AV.

Page 55: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jeszcze prościej:Algorytm Warshalla wyznacza domknięcie przechodnie digrafu w czasie rzędu V3.

Algorytm dla gęstych digrafów:

For(i = 0; i < V; i++)

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

if(A[s][i] && A[i][t]) A[s][t]= 1;

Różnica tkwi w kolejności pętli for

Page 56: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Czy da się jeszcze poprawić algorytm Warshalla?

For(i = 0; i < V; i++)

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

if(A[s][i] && A[i][t]) A[s][t]= 1;

TAK

Można skrócić czas wykonania algorytmu przesuwając sprawdzenie A[s][i] poza wewnętrzna pętlę (nie zależy od t).

Unikamy t-krotnego wykonywania wewnętrznej pętli, gdy A[s][i]=0.

Page 57: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Czy da się jeszcze poprawić algorytm Warshalla?

For(i = 0; i < V; i++)

for(s = 0; s < V; s++)

for(t = 0; t < V; t++)

if(A[s][i] && A[i][t]) A[s][t]= 1;

TAK

Można skrócić czas wykonania algorytmu przesuwając sprawdzenie A[s][i] poza wewnętrzna pętlę (nie zależy od t).

Unikamy t-krotnego wykonywania wewnętrznej pętli, gdy A[s][i]=0.

Dla wielkich grafów rzadkich koszt wykonywania algorytmu jest wciąż duży!

Page 58: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jak to poprawić?

Nie jest potrzebna cała macierz, by wyznaczyć domknięcie przechodnie.

Wystarczy sprawdzić istnienie jedynie niewielkiej liczby krawędzi, więc można

wstępnie przetworzyć dany digraf, tzn. posługując się abstrakcyjnym typem

danych, który udostępnia operację sprawdzania osiągalności – posługujemy się

wtedy terminem abstrakcyjnego domknięcia przechodniego.

Page 59: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Jak to poprawić?

Nie jest potrzebna cała macierz, by wyznaczyć domknięcie przechodnie.

Wystarczy sprawdzić istnienie jedynie niewielkiej liczby krawędzi, więc można

wstępnie przetworzyć dany digraf, tzn. posługując się abstrakcyjnym typem

danych, który udostępnia operację sprawdzania osiągalności – posługujemy się

wtedy terminem abstrakcyjnego domknięcia przechodniego.

Własność.Sprawdzanie w stałym czasie osiągalności (abstrakcyjne domknięcie przechodnie) dla digrafu może być zrealizowane po wykonaniu operacji wstępnych w czasie rzędu V3, przy wykorzystaniu pamięci rzędu V2.

Własność.Z wykorzystaniem DFS można uzyskać stały czas dla sprawdzania osiągalności dla abstrakcyjnego domknięcia przechodniego digrafu, wykonując operacje wstępne (wyznaczanie domknięcia przechodniego) w czasie rzędu V(V+E) i przy wykorzystaniu pamięci rzędu V2

Page 60: Graf skierowany (digraf)–zbiór wierzchołków i zbiór krawędzi …math.uni.lodz.pl/~karpinw/zadania/Aalgorytmow/Wyklad14... · 2016-01-10 · Graf skierowany (digraf)–zbiór

Dowód.

DFS wyznacza wszystkie wierzchołki osiągalne z wierzchołka początkowego w czasie rzędu E, dla reprezentacji w postaci listy sąsiedztwa.

Jeśli uruchomimy DFS V razy, jednokrotnie z każdego wierzchołka , to otrzymamy zbiory wierzchołków osiągalnych z każdego z wierzchołków (czyli domknięcie przechodnie) w czasie rzędu V(V+E).