10. Grafy i metody ich przeszukiwania. Zastosowania. Graf
Transkrypt
10. Grafy i metody ich przeszukiwania. Zastosowania. Graf
10. Grafy i metody ich przeszukiwania. Zastosowania. Graf – struktura matematyczna, która służy do przedstawiania i badania relacji między obiektami. W uproszczeniu jest to zbiór wierzchołków połączonych krawędziami. Zapis matematyczny: G = (V, E) gdzie: G – graf, V – zbiór wierzchołków, E – zbiór krawędzi. Typy grafów: Graf nieskierowany – Kierunek ruchu po grafie nie jest zdefiniowany. Graf skierowany – Ruch po grafie jest możliwy tylko w kierunkach wskazywanych przez krawędzie. Metody przeszukiwania: BFS (Breadth First Search) – algorytm przeszukiwania wszerz. Algorytm zaczyna od korzenia i odwiedza wszystkie połączone z nim węzły. DFS (Depth First Search) – algorytm przeszukiwania w głąb. Poszukiwanie zaczyna się od korzenia i porusza się w dół do samego końca gałęzi, po czym wraca się o jeden poziom i próbuje kolejne gałęzie. Algorytm łatwy do implementacji rekurencyjnie. Zastosowania: Grafy mają szerokie zastosowania w informatyce, a także w wielu dziedzinach życia codziennego, np. mapy – aby dowiedzieć się jaką najkrótszą drogą można dostać się z jednej miejscowości do drugiej, można w tym celu wykorzystać graf, którego wierzchołki będą odpowiadały miejscowościom, a krawędzie drogom. dokumenty hipertekstowe – przeszukując Internet napotykamy dokumenty, które zawierają odnośniki do innych dokumentów. Internet jest grafem, w którym wierzchołkami są dokumenty, a krawędziami odsyłacze. sieci – sieć komputerowa zbudowana jest z komputerów, które przesyłają między sobą informacje. Komputery w danej sieci są reprezentowane przez wierzchołki grafu, a połączenia między nimi przez krawędzie. - katalogi ulokowane w naszych komputerach wraz z podkatalogami też tworzą graf. 11. Algorytmy wyznaczania dróg w grafach. Droga – w grafie G(V,E,Y') nazywamy skończony ciąg krawędzi e1, e2, ..., en taki, że ei ∊ E, i = 1, …, n oraz istnieją wierzchołki x1, x2, …, xn+1 takie, że Y'(ei) = {xi, xi+1} dla i = 1, …, n. Czyli jeden wierzchołek z drugim są połączone bezpośrednio lub pośrednio przez inne wierzchołki grafu. Długość drogi – suma wszystkich wag krawędzi od x1 do xn+1. Przykład drogi w grafie: Wybrane algorytmy: a) Dijkstry Dijkstry jest algorytmem zachłannym, który działa następująco: Mając dany graf z wyróżnionym wierzchołkiem (źródłem) algorytm znajduje odległości od źródła do wszystkich pozostałych wierzchołków. Łatwo zmodyfikować go tak, aby szukał wyłącznie (najkrótszej) ścieżki do jednego ustalonego wierzchołka, po prostu przerywając działanie w momencie dojścia do wierzchołka docelowego. Algorytm Dijkstry znajduje w grafie wszystkie najkrótsze ścieżki pomiędzy wybranym wierzchołkiem a wszystkimi pozostałymi, przy okazji wyliczając również koszt przejścia każdej z tych ścieżek. [animacja: https://www.cs.usfca.edu/~galles/visualization/Dijkstra.html] b) A* Algorytm A* od wierzchołka początkowego tworzy ścieżkę, za każdym razem wybierając wierzchołek x z dostępnych w danym kroku niezbadanych wierzchołków tak, by minimalizować funkcję zdefiniowaną: gdzie: – droga pomiędzy wierzchołkiem początkowym a x. Dokładniej: suma wag krawędzi, które należą już do ścieżki plus waga krawędzi łączącej aktualny węzeł z x. – przewidywana przez heurystykę droga od x do wierzchołka docelowego. W każdym kroku algorytm dołącza do ścieżki wierzchołek o najniższym współczynniku f. Kończy w momencie natrafienia na wierzchołek będący wierzchołkiem docelowym. [animacja: https://en.wikipedia.org/wiki/A*_search_algorithm] d) Floyda-Warshalla Algorytm opiera się na spostrzeżeniu, że jeśli koszt dojścia z wierzchołka v do u jest większy od sumy kosztów dojść z wierzchołka v do k i z k do u, to za lepszy koszt należy przyjąć tę nową, mniejszą wartość. [apka] 25. Algorytm minimalnego drzewa rozpinającego i jego zastosowanie w działaniu przełączników sieciowych algorytm Prima: Tworzy drzewo dodając zawsze o najmniejszej wadze z jakiegoś odwiedzonego już wierzchołka tego drzewa. [sposób działania: http://www.algorytm.org/algorytmy-grafowe/algorytm-prima.html] Zastosowanie w działaniu przełączników sieciowych: Drzewo rozpinające ma związek z protokołem STP (Spanning Tree Protocol). Protokół ten został stworzony dla zwiększenia niezawodności środowisk sieciowych. Tworzy on graf bez pętli (drzewo rozpinające to właśnie graf bez pętli (cykli)) i ustala zapasowe łącza. W trakcie normalnej pracy sieci blokuje je tak, aby nie przekazywały one żadnych danych i wykorzystywana jest wtedy tylko jedna ścieżka, po której możę odbywać się komunikacja.