Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf ·...

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

Transcript of Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf ·...

Page 1: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Algorytmy i Struktury Danych.Grafy

dr hab. Bozena [email protected]

Jan Długosz University, Poland

Wykład 8

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 1 / 42

Page 2: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Grafy - Obszary Zastosowania

InformatykaTechnika 1

FizykaNauki społeczneBiologiaKartografiaLingwistykai wiele innych . . .

1Deo N. Teoria grafów i jej zastosowania w technice i informatyce, PWN,Warszawa 1980.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 2 / 42

Page 3: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Grafy - Zastosowania w Informatyce:

Reprezentacja struktury programówModelowanie systemów komputerowychAutomatyczna weryfikacja systemów współbieznych irozproszonychKryptografia - Szyfr Cezara, Problem Dalekopisu, Kod Graya,Kody Huffmana, kryptografia wizualna, itd.Sieci komputerowe - znajdowanie najkrótszych sciezeki wiele innych . . .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 3 / 42

Page 4: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - idea

Graf to - intuicyjnie - zbiór wierzchołków, które moga bycpołaczone krawedziami, w taki sposób, ze kazda krawedzkonczy sie i zaczyna w pewnym wierzchołku.Wierzchołki grafu zazwyczaj sa etykietowane (numerowane) ireprezentuja pewne obiekty (np. miasta).Krawedzie obrazuja relacje pomiedzy obiektami (np. połaczeniakolejowe).Krawedzie moga miec wyznaczony kierunek, a graf zawierajacytakie krawedzie nazywany jest grafem skierowanym.Krawedz moze posiadac wage, tzn. przypisana wartosc liczbowa,która okresla na przykład odległosc w kilometrach pomiedzywierzchołkami (jesli graf jest reprezentacja połaczen miedzymiastami).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 4 / 42

Page 5: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - Leonharda Eulera

Za pierwszego teoretyka i badacza grafów uwaza sie LeonhardaEulera2, który rozstrzygnał tzw. zagadnienie mostówkrólewieckich.

2Leonhard Euler (ur. 15 kwietnia 1707 r. w Bazylei - Szwajcaria, zm. 18 wrzesnia1783 r. w Petersburgu - Rosja) - szwajcarski matematyk, fizyk i astronom, jeden ztwórców nowoczesnej matematyki.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 5 / 42

Page 6: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Mosty królewieckie

Przez Królewiec przepływała rzeka Pregole, w której rozwidleniachznajdowały sie dwie wyspy. Ponad rzeka przerzucono siedem mostów,z których jeden łaczył obie wyspy, a pozostałe mosty łaczyły wyspy zbrzegami rzeki. Plan mostów pokazuje rysunek:

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 6 / 42

Page 7: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Mosty królewieckie

Zwykłe spacerowanie szybko sie znudziło mieszkancom Królewcai zaczeli zastanawiac sie, czy istnieje taka trasa spacerowa, któraprzechodzi przez kazdy most dokładnie raz, zadnego nie omija, ipozwala wrócic do punktu wyjscia.Mieszkancy nie potrafili rozwiazac postawionego problemusamodzielnie, wiec postanowili napisac do matematykaLeonharda Eulera.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 7 / 42

Page 8: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Mosty królewieckie

Euler wykazał, ze rozwiazanie problemu mieszkanców nie jestmozliwe, a decyduje o tym nieparzysta liczba wylotów mostówzarówno na kazda z wysp, jak i na oba brzegi rzeki. (Jesli wejdziesie po raz trzeci na wyspe, nie ma jak z niej wyjsc).Sytuacje te mozna przedstawic za pomoca nastepujacego grafu:

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 8 / 42

Page 9: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Mosty królewieckie

Problem mostów królewieckich, to inaczej problem znalezienia wdanym grafie tzw. cyklu Eulera, czyli cyklu przechodzacego przezwszystkie wierzchołki i wszystkie krawedzie danego grafu, aleprzez kazda krawedz tylko raz.W roku 1736 roku Euler udowdnił twierdzenie, które obecniemozna sformułowac w sposób nastepujacy:

W grafie mozna znalezc cykl Eulera wtedy i tylko wtedy,gdy graf jest spójny i kazdy jego wierzchołek ma parzystystopien.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 9 / 42

Page 10: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf skierowany

DefinicjaGrafem skierowanym (digrafem) nazywamy strukture

G = (V ,E)

gdzieV to zbiór wierzchołków,E ⊆ {(u, v) : u, v ∈ V} to zbiór uporzadkowanych parwierzchołków ze zbioru V , zwanych krawedziami.

Przez n oznaczamy ilosc wierzchołków (rozmiar zbioru V )Przez m oznaczamy ilosc krawedzi (rozmiar zbioru E)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 10 / 42

Page 11: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf skierowny G = (V ,E) - przykład

V = {1,2,3,4,5,6}E = {(1,2), (1,3), (2,4), (2,5), (3,4), (3,6), (4,6)}n = 6, m = 7

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 11 / 42

Page 12: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe Pojecia

Droga (sciezka) w grafie skierowanym to lista wierzchołków(n1,n2, . . . ,nk ) taka, ze wystepuje krawedz łaczaca kazdywierzchołek z nastepnym, to znaczy (ni ,ni+1) ∈ E dlai = 1,2, . . . , k .Droga prosta, to droga w której zadna krawedz sie nie powtarza.Długosc drogi wynosi k − 1, co stanowi liczbe krawedzinalezacych do tej samej drogi.Cykl w grafie skierowanym jest droga o długosci co najmniej 1,która zaczyna sie i konczy w tym samym wierzchołku. Długosccyklu jest długoscia drogi.Cykl jest prosty, jezeli zaden wierzchołek (oprócz pierwszego)nie pojawia sie w nim wiecej niz raz.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 12 / 42

Page 13: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe Pojecia

Jezeli graf posiada jeden lub wiecej cykli to mówimy, ze jestgrafem cyklicznym.Jezeli graf nie posiada cykli to, mówimy, ze jest grafemacyklicznym.

Przykład:

Cykle proste: (0,0), (0,2,0), (1,3,2,1), (1,3,2,4,1)Cykl nieprosty: (0,2,1,3,2,0)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 13 / 42

Page 14: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe Pojecia

Jezeli graf posiada jeden lub wiecej cykli to mówimy, ze jestgrafem cyklicznym.Jezeli graf nie posiada cykli to, mówimy, ze jest grafemacyklicznym.Przykład:

Cykle proste: (0,0), (0,2,0), (1,3,2,1), (1,3,2,4,1)Cykl nieprosty: (0,2,1,3,2,0)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 13 / 42

Page 15: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf nieskierowany

DefinicjaGrafem nieskierowanym (grafem) nazywamy strukture

G = (V ,E)

gdzieV to zbiór wierzchołków,E ⊆ {{u, v} : u, v ∈ V} to zbiór dwuelementowychpodzbiorów/multizbiorów zbioru V , zwanych krawedziami.

Przez n oznaczamy ilosc wierzchołków (rozmiar zbioru V )Przez m oznaczamy ilosc krawedzi (rozmiar zbioru E)

Droga w grafie nieskierowanym, to lista wierzchołków.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 14 / 42

Page 16: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf nieskierowny - przykład

V = {1,2,3,4,5,6}E = {(1,2), (1,3), (2,4), (2,5), (3,4), (3,6), (4,6)}n = 6, m = 7

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 15 / 42

Page 17: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe pojecia

Graf posiadajacy krawedzie pomiedzy kazda para róznychwierzchołków nosi nazwe grafu pełnego.O grafie nieskierowanym mówi sie ze jest planarny, jesli istniejemozliwosc rozmieszczenia jego wierzchołków na płaszczyznie, anastepnie narysowania jego krawedzi jako lini ciagłych które sienie przecinaja.Grafy nieplanarne to takie, które nie posiadaja reprezentacjipłaskiej.

Planarnosc ma duze zastosowanie w informatyce, m.in., wgraficznej reprezentacji róznego rodzaju układów (np. scalonych,bramek, etc.).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 16 / 42

Page 18: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe pojecia

Graf posiadajacy krawedzie pomiedzy kazda para róznychwierzchołków nosi nazwe grafu pełnego.O grafie nieskierowanym mówi sie ze jest planarny, jesli istniejemozliwosc rozmieszczenia jego wierzchołków na płaszczyznie, anastepnie narysowania jego krawedzi jako lini ciagłych które sienie przecinaja.Grafy nieplanarne to takie, które nie posiadaja reprezentacjipłaskiej.Planarnosc ma duze zastosowanie w informatyce, m.in., wgraficznej reprezentacji róznego rodzaju układów (np. scalonych,bramek, etc.).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 16 / 42

Page 19: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Podstawowe pojecia

Stopien wierzchołka:W grafie nieskierowanym to liczba incydentnych z nim krawedzi.W grafie skierowanym to suma stopni wejsciowego (ilosckonczacych sie krawedzi) i wyjsciowego (ilosc wychodzacychkrawedzi).

Graf regularny to graf, w którym kazdy wierzchołek ma taki samstopien.f -graf to graf z ograniczonym stopniem wierzchołka, tzn. jegostopien nie moze byc wiekszy niz f .

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 17 / 42

Page 20: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Przykład

Stopien wierzchołka 1 jesy równy 2, a wierzchołka 2 jest równy 3.Graf jest planarny.3-graf.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 18 / 42

Page 21: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Reprezentacja grafów w komputerze

Macierz sasiedztwaLista incydencji (sasiedztwa)Lista krawedziMacierz incydencji

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 19 / 42

Page 22: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz sasiedztwa

Dany jest graf G = (V ,E), |V | = n, |E | = mBudujemy tablice (macierz) M o rozmiarach n · n.Wypełniamy tablice M w sposób nastepujacy:

Zerem - jesli dwa wierzchołki nie sa połaczone krawedzia.Jedynka - jesli dwa wierzchołki sa połaczone.

Uwagi: Dla grafów nieskierowanych macierz sasiedztwa jestsymetryczna, zatem implementujac ja za pomoca tablic dynamicznychmozna ja zmniejszyc do połowy - zapisujemy tylko macierzdolno-(górno)-trójkatna.

Złozonosc pamieciowa: O(n2)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 20 / 42

Page 23: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz sasiedztwa - graf nieskierowany

1 2 3 4 5 61 1 12 1 1 13 1 1 14 1 1 15 16 1 1

Czas wstawienia: O(1)Czas usuniecia: O(1)Czas zapytania: O(1)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 21 / 42

Page 24: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz sasiedztwa - graf skierowany

0 1 2 3 40 1 1 11 12 1 1 13 1 14 1

Czas wstawienia: O(1)Czas usuniecia: O(1)Czas zapytania: O(1)

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 22 / 42

Page 25: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista incydencji

Dany jest graf G = (V ,E), |V | = n, |E | = mBudujemy liste dla kazdego wierzchołka v ∈ V , w którejprzechowujemy zbiór wierzchołków połaczonych krawedzia z v .Złozonosc pamieciowa: O(n + m).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 23 / 42

Page 26: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista incydencji - graf nieskierowany

1: 2 32: 1 4 53: 1 4 64: 2 3 65: 26: 3 4

Czas wstawienia: O(1)Czas usuniecia: czaswyszukiwania na liscieuporzadkowanejCzas zapytania: czaswyszukiwania na liscieuporzadkowanej

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 24 / 42

Page 27: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista incydencji - graf skierowany

0: 0 1 21: 32: 0 1 43: 2 44: 1

Czas wstawienia: O(1)Czas usuniecia: czaswyszukiwania na liscieuporzadkowanej.Czas zapytania: czaswyszukiwania na liscieuporzadkowanej.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 25 / 42

Page 28: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista Krawedzi

Dany jest graf G = (V ,E), |V | = n, |E | = mLista krawedzi to lista, na której przechowujemy wszystkiekrawedzie wystepujace w grafie.Zapisujac przy pomocy tej reprezentacji graf, w którym wystepujakrawedzie skierowane i nieskierowane nalezy w przypadkukrawedzi nieskierowanej z u do v zapisac krawedz dwukrotnie:u − v oraz v − u.Złozonosc pamieciowa: O(m).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 26 / 42

Page 29: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista krawedzi - graf nieskierowany

1 - 21 - 32 - 12 - 42 - 53 - 13 - 43 - 64 - 24 - 34 - 65 - 26 - 36 - 4

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 27 / 42

Page 30: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Lista krawedzi - graf skierowany

0 - 00 - 10 - 21 - 32 - 02 - 12 - 43 - 23 - 44 - 1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 28 / 42

Page 31: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz incydencji

Dany jest graf G = (V ,E), |V | = n, |E | = mMacierz incydencji to tablica o rozmiarach n ·m.Składa sie ona z m kolumn i n wierszy:

jesli krawedz wychodzi z danego wierzchołka, to piszemy wodpowiedniej kolumnie (-1),jesli krawedz wchodzi do danego wierzchołka, to piszemy (+1),jesli wierzchołek nie nalezy do krawedzi, to piszemy 0,jesli jest petla własna, to piszemy 2.

Złozonosc pamieciowa O(n ·m).

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 29 / 42

Page 32: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz incydencji - graf skierowany

0 1 2 3 40 - 0 20 - 1 -1 10 - 2 -1 11 - 3 -1 12 - 0 1 -12 - 1 1 -12 - 4 -1 13 - 2 1 -13 - 4 -1 14 - 1 1 -1

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 30 / 42

Page 33: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Macierz sasiedztwa a lista sasiedztwa

Macierze sasiedztwa sa preferowanym sposobem reprezentacjigrafów wówczas, gdy grafy sa geste, tzn. kiedy liczba krawedzijest bliska maksymalnej mozliwej ich liczby.Dla grafu skierowanego o n wierzchołkach maksymalna liczbakrawedzi wynosi n2.Jesli graf jest rzadki, to reprezentacja oparta na listach sasiedztwamoze pozwolic zaoszczedzic pamiec.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 31 / 42

Page 34: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Algorytm przeszukiwania grafu w głab - DFS

Algorytm DFS to podstawowa metoda badania grafówskierowanych.Algorytm DFS wykorzystuje sie do badania spójnosci grafu - jesliprocedura wywołana dla pierwszego wierzchołka “dotrze” dowszystkich wierzchołków grafu to graf jest spójny.Algorytm:

Wybrany wierzchołek umiesc na stosie, zaznacz jako odwiedzony iprzejdz do jego nastepnika. Nastepnik równiez umiesc na stosie,zaznacz jako odwiedzony i przejdz do jego nastepnika.Jesli napotkany wierzchołek nie ma krawedzi incydentych znieodwiedzonymi wierzchołkami, usun go ze stosu i pobierz zestosu kolejny wierzchołek do przeszukania.

W praktyce stosuje sie zasade, ze jesli przeszukiwanywierzchołek jest połaczony krawedziami z wieloma wierzchołkami,wybiera sie do przeszukania wierzchołek o najmniejszej liczbieporzadkowej. Dlatego szukajac kolejny nieodwiedzony nastepniknalezy rozpoczynac od konca macierzy.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 32 / 42

Page 35: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

DFS - przykład

Jedno z mozliwych drzewprzeszukiwania:

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 33 / 42

Page 36: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Przeszukiwanie grafu wszerz (BFS)

Aby przeszukac graf wszerz (BFS) nalezy zamiast stosu wykorzystackolejke do przechowywania wierzchołków, a kolejnychnieodwiedzonych nastepników szukac od poczatku macierzy.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 34 / 42

Page 37: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

BFS i DFS- przykład

W wyniku wywołaniaprocedury DFS dla grafu obokotrzymamy wierzchołki wnastepujacej kolejnosci:1,2,4,5,3,6.W wyniku wywołaniaprocedury BFS dla grafu obokotrzymamy wierzchołki wkolejnosci: 1,2,3,4,5,6.

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 35 / 42

Page 38: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

Definicja grafuclass Graph{private:int n; // liczba wierzchołków grafubool** adj; // matryca przylegania

public:Graph(int);// inicjalizacja struktury Graph~Graph();void addEdge(int a, int b); // dodanie krawedzivoid display(); // wyswietlenie grafuvoid dfs(int); // wyszukiwanie "wglab"void bfs(int); // wyszukiwanie "wszerz"int getUnVisitedVertex(int, bool const []);friend void ::displayVertex(int);

};

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 36 / 42

Page 39: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

Inicjalizacja struktury GraphGraph::Graph(int n = 6){this->n = n;this->adj = new (nothrow) bool* [n];for (int k = 0; k < n; ++k) {this->adj[k] = new (nothrow) bool [n];

}for(int b = 0; b < n; ++b) {for(int a = 0; a < n; ++a) {this->adj[a][b] = false;

}}

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 37 / 42

Page 40: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

Dodanie krawedzivoid Graph::addEdge(int a, int b) {if (a >= 0 && a < this->n &&

b >= 0 && b < this->n){this->adj[a][b] = true;this->adj[b][a] = true;

} else{cout << "Niepoprawne dane\n\n";

}}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 38 / 42

Page 41: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

Wyswietlenie grafuvoid displayVertex(int a) {cout << (char)(’A’ + a);

}void Graph::display() {cout << "\nKrawedzie grafu:\n";for (int row = 0; row < this->n; ++row) {for (int col = 0; col < this->n; ++col) {if (this->adj[row][col]) {

cout << (char)(’A’ + row) << ’-’;cout << (char)(’A’ + col) << " ";

}}

}cout << endl;

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 39 / 42

Page 42: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

nie odwiedzony wierzchołek// zwraca nie odwiedzony wierzchołek przyległy do a// zwraca -1, jezeli takiego wierzchołka nie maint Graph::getUnVisitedVertex(int a, bool const visited []){for (int b = 0; b < this->n; ++b) {

if (this->adj[a][b] && !visited[b]) {return b;

}}return -1;

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 40 / 42

Page 43: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

Wyszukiwanie "wgłab"void Graph::dfs(int a) // wyszukiwanie "wglab"{bool* visited = new (nothrow) bool[this->n];for (int k = 0; k < this->n; ++k) visited[k] = false;STACK<int> s;visited[a] = true; // rozpocznij od wierzcholka adisplayVertex(a); // wyswietl wierzcholeks.push(a); // zapisz na stoswhile (!s.empty()) {

// pobierz nie odwiedzony wierzcholek,// przylegly do szczytowego elementu stosuint b = this->getUnVisitedVertex(s.top(), visited);if (b == -1) { // jezeli nie ma takiego wierzcholka,s.pop();

} else {visited[b] = true; // oznacz wierzcholek jako odwiedzonydisplayVertex(b); // wyswietl wierzcholeks.push(b); // zapisz na stos

}}delete[] visited;

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 41 / 42

Page 44: Algorytmy i Struktury Danych. - Grafy - wozna.orgwozna.org/students/2017-2018/asd/asd08.pdf · Grafy - Zastosowania w Informatyce: Reprezentacja struktury programów ... (AJD) Algorytmy

Graf - pewna implementacja

wyszukiwanie wszerzvoid Graph::bfs(int a) // wyszukiwanie "wszerz"{bool* visited = new (nothrow) bool[this->n];for (int k = 0; k < this->n; ++k) visited[k] = false;Queue<int> q;visited[a] = true; // rozpocznij od wierzcholka adisplayVertex(a); // wyswietl wierzcholekq.inject(a); // wstaw na koncuwhile (!q.empty()) { // do opróznienia kolejki,

int b = q.front(); // pobierz piewszy wierzcholekq.eject(); // usun go z kolejki// dopóki ma nie odwiedzonych sasiadówint c;while ((c = this->getUnVisitedVertex(b, visited)) != -1){ // pobierz sasiadavisited[c] = true; // oznaczdisplayVertex(c); // wyswietlq.inject(c); // wstaw do kolejki

} // while} // while(kolejka nie jest pusta)delete [] visited;

}

Bozena Wozna-Szczesniak (AJD) Algorytmy i Struktury Danych. Wykład 8 42 / 42