Algorytmy i struktury danych Reprezentacja grafu Wybrane problemy
Graf Pętle Wielokrotne krawędzie Wagi 10 11 7 Prosty Skierowany
Reprezentacja grafu Macierz sąsiedztwa Lista sąsiedztwa B D A B C D Macierz sąsiedztwa A B C D 1 C Lista sąsiedztwa A B C D B A C D B D B C Jeśli macierz jest symetryczna (graf nieskierowany), można przechowywać tylko jedną połówkę.
Reprezentacja grafu Macierz incydencji Lista incydencji m p m n o p n 1 o Lista incydencji m n o p p n m o p p n m n o
Reprezentacja wag Macierz sąsiedztwa Lista incydencji A 2 7 B D A B C 3 A B C D 5 7 2 3 5 C 2 Lista incydencji A B C D A,2 B,3 D,2 B,7 C,5
Składowe spójnosci DFS
Minimalne drzewo spinające 1 3 6 2 4 8 5 Zastosowania – np. budowa sieci dróg
Minimalne drzewo spinające Alg Kruskala: Wybieraj kolejno krawędzie o minimalnej wadze tak, by nie tworzyły cyklu. Pot. problem: stwierdzanie obecności cyklu. Alg Prima-Dijkstry: Drzewo = krawędź o minimalnej wadze; Spośród krawędzi incydentnych z aktualnym drzewem wybierz krawędź o najmniejszej wadze; Dodaj krawędź do drzewa. Pot. problem: grafy niespójne.
Minimalna droga 1 3 6 7 4 9 2 Zastosowania: - wybór najkrótszej (najszybszej) trasy przejazdu; - wybór najtańszego procesu technologicznego.
Alg. Dijkstry Z.: Wagi są nieujemne Dla sąsiadów wierzchołka startowego S ustaw odległość di równą wadze krawędzi e(s,i), dla każdego wierzchołka innego niż S inicjujemy di = Spośród nieodwiedzonych wierzchołków wybierz wierzchołek i o mininimalnej ogległości di Dla sąsiadów j wybranego wierzchołka aktualizuj odległość jako min{ dj, di+e(j,w) } Jeżeli są nieosiągnięty został wierzchołek końcowy K (lub są nieodwiedzone wierzchołki gdy nie zadajemy K) przejdź do punktu 2
Droga, cykl Eulera Marszruta – otwarta (zamknięta), zawierająca wszystkie krawędzie w grafie Zastosowania: Problem chińskiego listonosza; Rysowanie/wycinanie figur przy pomocy plotera.
Minimalne drzewo spinające Algorytm Dijkstry: Dla wszystkich wierzchołków ustal s=¥; Dla w. początkowego P ustal s=0. Podstaw D={P}; Zaktualizuj odległość s’ dla wszystkich wierzchołków sąsiednich do D; s’[w] = min { s[x] + waga krawędzi {x, w} ; po wszystkich x należących do D }; Wybierz wierzchołek o minimalnej s’, podstaw dla niego s=s’. D = D È {w}. Algorytm pozwala efektywnie wyznaczyć sieć dróg - z określonego wierzchołka do wszystkich innych. Pot. problem: ujemne wagi.
Cykl Eulera - alg Fleury’ego Wystartuj z wierzchołka o nieparzystym stopniu (jeśli jest); Wybierz dowolną krawędź, ale most wybieraj w ostateczności; Przejdź do kolejnego wierzchołka. Algorytm działa dla grafów eulerowkich, półeulerowskich. Problematyczna jest jednak implementacja testu, czy krawędź jest mostem.
Cykl Eulera – alg. ze stosem Wystartuj z dowolnego wierzchołka; Jeżeli istnieją nie przechodzone dotąd krawędzie incydentne z bieżącym wierzchołkiem: Wybierz dowolną krawędź; Przejdź do kolejnego wierzchołka i odłóż go na stos; W przeciwnym wypadku: Przenieś wierzchołek do rozwiązania i zdejmij go ze stosu; Przejdź do wierzchołka na szczycie stosu. Algorytm wymaga grafu eulerowskiego.