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.