Algorytmy i Struktury Danych.

Podobne dokumenty
Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

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

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

Algorytmy i Struktury Danych.

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

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

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych.

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych

Wstęp do Programowania potok funkcyjny

Programowanie Proceduralne

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

Sortowanie topologiczne skierowanych grafów acyklicznych

Algorytmy i Struktury Danych.

Wstęp do Programowania potok funkcyjny

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

Ogólne wiadomości o grafach

Matematyczne Podstawy Informatyki

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

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

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

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

Algorytmy z powracaniem

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

Algorytmy i Struktury Danych.

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

Wstęp do Informatyki

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Wstęp do Programowania 2

Algorytmy i Struktury Danych.

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

Wykład 7. Algorytmy grafowe

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

Minimalne drzewa rozpinające

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

Wstęp do sieci neuronowych, wykład 11 Łańcuchy Markova

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

Wykład 10 Grafy, algorytmy grafowe

Wstęp do sieci neuronowych, wykład 12 Łańcuchy Markowa

Algorytmy i Struktury Danych.

Języki programowania, wtorek , 12:15-13:45 Zadanie 11 - ostatnie

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

Programowanie Procedurale

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

Strategia "dziel i zwyciężaj"

Sieć (graf skierowany)

Egzaminy i inne zadania. Semestr II.

Algorytmy i Struktury Danych.

Digraf. 13 maja 2017

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

Algorytmy i Struktury Danych.

Algorytmy i Struktury Danych.

Znajdowanie skojarzeń na maszynie równoległej

RKI Zajęcia 14 Przeszukiwanie grafu w głąb

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Programowanie dynamiczne i algorytmy zachłanne

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

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

Algorytmy i Struktury Danych.

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

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

Informatyka II. Laboratorium.

Algorytmiczna teoria grafów

Siedem cudów informatyki czyli o algorytmach zdumiewajacych

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

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

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Algorytm selekcji Hoare a. Łukasz Miemus

Algorytmy i struktury danych

. Podstawy Programowania 2. Algorytmy dfs i bfs. Arkadiusz Chrobot. 2 czerwca 2019

RKI Zajęcia 13 Przeszukiwanie grafu wszerz

Programowanie w VB Proste algorytmy sortowania

Digraf o V wierzchołkach posiada V 2 krawędzi, zatem liczba różnych digrafów o V wierzchołkach wynosi 2 VxV

Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Wprowadzenie teoretyczne. Algorytm DFS Animacja. Algorytm DFS Animacja. Notatki. Notatki.

Programowanie dynamiczne

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

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

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

Rozwiązywanie problemów metodą przeszukiwania

Drzewa poszukiwań binarnych

Wstęp do programowania. Zastosowania stosów i kolejek. Piotr Chrząstowski-Wachtel

Podejście zachłanne, a programowanie dynamiczne

Indukowane Reguły Decyzyjne I. Wykład 3

Programowanie i struktury danych

Problem 1 prec f max. Algorytm Lawlera dla problemu 1 prec f max. 1 procesor. n zadań T 1,..., T n (ich zbiór oznaczamy przez T )

TEORIA GRAFÓW I SIECI

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

Transkrypt:

Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com 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. Connected components) 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 Definicja Każda spójna składowa grafu G = (V, E) jest maksymalnym podzbiorem wierzchołków U zbioru V takim, że dla dowolnych dwóch wierzchołków z U istnieje łacz aca je ścieżka w G. Jeżeli graf składa się z jednej spójnej składowej to mówimy, że jest spójny (ang. connected). Każdy graf nieskierowany można podzielić na jedna lub większa 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 1 J. 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 G Algorytmy DFS oraz BFS wyznaczaja spójne składowe grafu G 1. 1 J. 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 G Algorytmy DFS oraz BFS wyznaczaja spójne składowe grafu G 1. Złożoność: O((m + n). 1 J. 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), tablica visited o rozmiarze V = n Algorytm DFS: 1: for all i := 1 to n do 2: visited[i] := 0; 3: end for 4: for all i := 1 to n do 5: if visited[i] = 0 then 6: visit(i, visited); 7: end if 8: end for Require: Graf (V, E), tablica visited o rozmiarze V = n Algorytm visit(i,visited): 1: print(i); 2: visited[i] := 1; 3: for each neighbor j of i do 4: if visited[j] = 0 then 5: visit(j); 6: end if 7: 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-C DFS - odwiedzone wierzcholki: ABDC DFS rekurencyjny - odwiedzone wierzcholki: ABDC BFS - 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 porzadek wierzchołków z V taki, że jeśli graf G zawiera krawędź (u, v), to w tym porzadku wierzchołek u wystę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 grafie acyklicznym skierowanym można posortować topologicznie na jeden lub więcej sposobów 7,5,3,11,8,2,9,10 7,5,11,2,3,10,8,9 3,7,8,5,11,10,9,2 5,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 bazujacy na DFS Wykonaj TopologicalDFS na wejściowym acyklicznym grafie skierowanym G = (V, E). Wypisz wierzchołki w porzadku malejacym 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 := 0 2: for all i := 1 to n do 3: visited[i] := 0; final[i] := 0 4: end for 5: for all i := 1 to n do 6: if visited[i] = 0 then 7: visit(i, t, visited, final); 8: end if 9: end for Algorytm visit(i,t,visited,final): 1: visited[i] := 1; 2: for each outgoing edge j of i do 3: if visited[j] = 0 then 4: visit(j, t, visited, final); 5: end if 6: end for 7: 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ępujac a 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 << "Niepoprawne dane\n\n"; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 15 / 20

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ównym zero Wykorzystywana własność: jeśli graf jest acyklicznym grafem skierowanym, to posiada przynajmniej jeden wierzchołek o stopniu 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 ze wszystkimi wychodzacymi z niego krawędziami i umieszczamy go na liście wierzchołków posortowanych topologicznie. Jeśli w grafie pozostana jakieś wierzchołki, to graf posiada cykle i sortowania 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! = do 3: Usuń wierzchołek n z Q. 4: Wypisz n. 5: for all m V takiego, że (n, m) E do 6: E = E \ (n, m) 7: if m nie ma już więcej krawędzi wchodzacych then 8: Wstaw m do Q. 9: end if 10: end for 11: end while 12: if E! = then 13: 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 1 4 4 4 3 3 3 2 5 Usuwamy 1 5 2 Usuwamy 2 5 4 Usuwamy 3 5 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