22
Algorytmy i Struktury Danych. Grafy dr hab. Bo˙ zena Wo´ zna-Szcze´ sniak [email protected] Jan Dlugosz University, Poland Wyklad 9 Bo˙ zena Wo´ zna-Szcze´ sniak (AJD) Algorytmy i Struktury Danych. Wyklad 9 1 / 20

Algorytmy i Struktury Danych. - GrafyAlgorytmy i Struktury Danych. Grafy dr hab. Bozena Wozna-Szcz´ e˙ sniak´ [email protected] Jan Długosz University, Poland Wykład 9 Bo˙zena

  • Upload
    others

  • View
    22

  • Download
    2

Embed Size (px)

Citation preview

  • Algorytmy i Struktury Danych.Grafy

    dr hab. Bożena Woźna-Szcześ[email protected]

    Jan Długosz University, Poland

    Wykład 9

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 20

  • Plan wykładu

    Wyszukiwanie spójnych składowych grafu (ang. Connectedcomponents)Sortowanie topologiczne (ang. Topological sort)

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 2 / 20

  • Spójne składowe

    DefinicjaKażda spójna składowa grafu G = (V ,E) jest maksymalnympodzbiorem wierzchołków U zbioru V takim, że dla dowolnychdwóch wierzchołków z U istnieje łącząca je ścieżka w G.Jeżeli graf składa się z jednej spójnej składowej to mówimy, żejest spójny (ang. connected).Każdy graf nieskierowany można podzielić na jedna lub większąliczbę spójnych składowych (ang. connected components).

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 3 / 20

  • Spójne składowe

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 4 / 20

  • Spójne podgrafy

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 5 / 20

  • Spójne składowe - algorytm

    Wejście: G = (V ,E)Wyjście: Spójne składowe grafu G

    Algorytmy DFS oraz BFS wyznaczają spójne składowe grafu G 1.Złożoność: O((m + n).

    1J. Hopcroft, R. Tarjan. “Efficient algorithms for graph manipulation”. 1973 .Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 20

  • Spójne składowe - algorytm

    Wejście: G = (V ,E)Wyjście: Spójne składowe grafu GAlgorytmy DFS oraz BFS wyznaczają spójne składowe grafu G 1.

    Złożoność: O((m + n).

    1J. Hopcroft, R. Tarjan. “Efficient algorithms for graph manipulation”. 1973 .Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 20

  • Spójne składowe - algorytm

    Wejście: G = (V ,E)Wyjście: Spójne składowe grafu GAlgorytmy DFS oraz BFS wyznaczają spójne składowe grafu G 1.Złożoność: O((m + n).

    1J. Hopcroft, R. Tarjan. “Efficient algorithms for graph manipulation”. 1973 .Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 6 / 20

  • Spójne składowe - algorytm DFS

    Require: Graf (V ,E), tablicavisited o rozmiarze |V | = n

    Algorytm DFS:1: for all i := 1 to n do2: visited [i] := 0;3: end for4: for all i := 1 to n do5: if visited [i] = 0 then6: visit(i , visited);7: end if8: end for

    Require: Graf (V ,E), tablicavisited o rozmiarze |V | = n

    Algorytm visit(i,visited):1: print(i);2: visited [i] := 1;3: for each neighbor j of i do4: if visited [j] = 0 then5: visit(j);6: end if7: end for

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 7 / 20

  • Implementacja

    void Graph::dfs_rek(int a) {bool* visited = new (nothrow) bool[this->n];for (int k = 0; k < this->n; ++k)

    visited[k] = false;for (int k = a; k < this->n; ++k){if (visited[k] == false) this->visit(k,visited);

    }delete[] visited;

    }

    void Graph::visit(int a, bool* visited) {displayVertex(a);visited[a] = true;int c = this->getUnVisitedVertex(a, visited);while (c != -1){

    if (visited [c] == false) visit(c,visited);c = this->getUnVisitedVertex(a, visited);

    }}

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 8 / 20

  • Wykonanie

    Krawedzie grafu:A-B A-C B-A B-D C-A C-D D-B D-CDFS - odwiedzone wierzcholki: ABDCDFS rekurencyjny - odwiedzone wierzcholki: ABDCBFS - odwiedzone wierzcholki: ABCD

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 9 / 20

  • Spójne składowe

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 10 / 20

  • Sortowanie Topologiczne - sformułowanie problemu

    Wejście: Acykliczny graf skierowany G = (V ,E).Wyjście: Liniowy porządek wierzchołków z V taki, że jeśli graf Gzawiera krawędź (u, v), to w tym porządku wierzchołek uwystępuje przed wierzchołkiem v .

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 11 / 20

  • Sortowanie topologicznie - przykład

    Wierzchołki w każdym grafieacyklicznym skierowanymmożna posortowaćtopologicznie na jeden lubwięcej sposobów

    7,5,3,11,8,2,9,107,5,11,2,3,10,8,93,7,8,5,11,10,9,25,7,11,2,3,8,9,10

    7 5 3

    11 8

    2 9 10

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 12 / 20

  • Sortowanie Topologiczne - algorytm bazujący na DFS

    Wykonaj TopologicalDFS na wejściowym acyklicznym grafieskierowanym G = (V ,E).Wypisz wierzchołki w porządku malejącym ze względu na ich“czas końcowy” - umieszczony w tablicy final .Złożoność: O(|V |+ |E |)Wejście: Graf G, tablice visited oraz final o rozmiarze |V | = n

    Algorytm TopologicalDFS:1: t := 02: for all i := 1 to n do3: visited [i] := 0; final[i] := 04: end for5: for all i := 1 to n do6: if visited [i] = 0 then7: visit(i , t , visited , final);8: end if9: end for

    Algorytm visit(i,t,visited,final):1: visited [i] := 1;2: for each outgoing edge j of i do3: if visited [j] = 0 then4: visit(j , t , visited , final);5: end if6: end for7: t = t + 1;8: final[i] = t ;

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 13 / 20

  • Sortowanie Topologiczne - przykład

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 14 / 20

  • Implementacja

    Aby na postawie implementacji z poprzedniego wykładu wykonaćimplementację grafu skierowanego, wystarczy zmienić metodęaddEdge na następującą

    void Graph::addEdge(int a, int b){if (a >= 0 && a < this->n && b >= 0 && b < this->n) {this->adj[a][b] = true;

    } else {cout

  • Implementacja

    void Graph::topological_visit(int a, int & t,bool* visited, int* fin)

    {visited[a] = true;int c = this->getUnVisitedVertex(a, visited);while (c != -1){

    if (visited [c] == false)topological_visit(c,t,visited,fin);

    c = this->getUnVisitedVertex(a, visited);}t++;fin[a] = t;

    }

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 16 / 20

  • Implementacja

    void Graph::topological_dfs() {bool* visited = new (nothrow) bool[this->n];int* fin = new (nothrow) int[this->n];int t = 0;for (int k = 0; k < this->n; ++k) {visited[k] = false; fin[k] = 0;

    }for (int k = 0; k < this->n; ++k) {if (visited[k] == false)

    this->topological_visit(k,t,visited,fin);}delete[] visited;for (int k = 0; k < this->n; ++k){

    int idx = max(fin,this->n);displayVertex(idx);fin[idx] = -1;

    }delete[] fin;

    }Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 17 / 20

  • Sortowanie topologiczne - Algorytm 2

    Metoda usuwania wierzchołków o stopniu wejściowym równymzero

    Wykorzystywana własność: jeśli graf jest acyklicznym grafemskierowanym, to posiada przynajmniej jeden wierzchołek ostopniu wejściowym równym zero.Idea: Dopóki graf posiada wierzchołki o stopniu wejściowym zero,znajdujemy taki wierzchołek, usuwamy go z grafu wraz zewszystkimi wychodzącymi z niego krawędziami i umieszczamy gona liście wierzchołków posortowanych topologicznie.Jeśli w grafie pozostaną jakieś wierzchołki, to graf posiada cykle isortowania topologicznego nie można wykonać.Złożoność: O(|V |+ |E |)

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 18 / 20

  • Sortowanie topologiczne - Algorytm 2

    Algorytm: G = (V ,E)1: Q - Zbiór wszystkich wierzchoków bez krawędzi wchodzacych;2: while Q! = ∅ do3: Usuń wierzchołek n z Q.4: Wypisz n.5: for all m ∈ V takiego, że (n,m) ∈ E do6: E = E \ (n,m)7: if m nie ma już więcej krawędzi wchodzących then8: Wstaw m do Q.9: end if

    10: end for11: end while12: if E! = ∅ then13: Graf G ma cykl.14: end if

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 19 / 20

  • Sortowanie topologiczne - Algorytm 2, przykład

    5

    4

    3

    2

    1

    Usuwamy 1−−−−−−→ 5

    4

    3

    2 Usuwamy 2−−−−−−→ 5

    4

    3

    Usuwamy 3−−−−−−→ 5

    4

    Usuwamy 4−−−−−−→ 5 Usuwamy 5−−−−−−→

    Sortowanie topologiczne: 1, 2, 3, 4, 5

    Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 20 / 20