Przeszukiwanie w głąb
Z Wikipedii
Niniejszy artykuł jest częścią cyklu teoria grafów.
|
Najważniejsze pojęcia Wybrane klasy grafów Algorytmy grafowe Zagadnienia przedstawiane jako problemy grafowe Inne zagadnienia |
edytuj ten szablon |
Przeszukiwanie w głąb | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Kolejność odwiedzania węzłów | ||||||||||||
Podstawowe informacje | ||||||||||||
|
Przeszukiwanie w głąb (ang. Depth-first search, w skrócie DFS) – w informatyce algorytm przeszukiwania grafu używany do przechodzenia lub przeszukiwania drzewa lub grafu. Przeszukiwanie 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 itd.
Spis treści |
[edytuj] Przykład
Przyjrzyjmy się poniższemu grafowi:
Zakładając że najpierw wybiera się węzły z lewej strony, później te z prawej, oraz zakładając, że przeszukiwanie będzie pamiętało które wierzchołki są już odwiedzone, przeszukiwanie zaczynając od A, odwiedzi się węzły w tej kolejności: A, B, D, F, E, C, G.
Przeszukując bez pamiętania które wierzchołki się już odwiedziło, kolejność będzie taka: A, B, D, F, E, A, B, D, F, E, itd. w nieskończoność, będąc uwięzionym w cyklu A, B, D, F, E i nigdy nie docierając do C lub G.
[edytuj] Algorytm rekurencyjny (pseudokod)
DFS(Wierzchołek, Cel) { jeżeli Wierzchołek nieodwiedzony jeżeli Wierzchołek jest równy Cel { zwróć Wierzchołek jako wynik (i zakończ to wywołanie funkcji) } w przeciwnym wypadku, jeżeli Wierzchołek jest różny od Cel, wykonaj { zaznacz Wierzchołek jako odwiedzony dodaj Wierzchołek na Stos dopóki Stos jest niepusty wykonuj { zdejmij węzeł ze szczytu Stosu i nazwij go Wierzchołek2 wywołaj DFS(Wierzchołek2, Cel) } } }
[edytuj] Właściwości
[edytuj] Złożoność pamięciowa
Złożoność pamięciowa przeszukiwania w głąb jest o wiele mniejsza niż przeszukiwania wszerz.
[edytuj] Złożoność czasowa
Złożoność czasowa obu algorytmów jest proporcjonalna do sumy liczby wierzchołków i liczby krawędzi w przeszukiwanym grafie.
[edytuj] Kompletność
[edytuj] Zastosowania algorytmu
Przeszukiwanie w głąb jest często stosowanym algorytmem w teorii grafów. Używa się go m.in. do:
- Znajdywania najkrótszych ścieżek między dwoma wierzchołkami w drzewie.
- Sprawdzania, czy istnieje ścieżka między dwoma wierzchołkami w grafie.
- Wyznaczania spójnych składowych.
Rozwiązania poniższych problemów teoriografowych opierają się na przeszukiwaniu w głąb:
- Wyznaczanie silnie spójnych składowych w grafie skierowanym.
- Sortowanie topologiczne skierowanego grafu acyklicznego.
Ponadto algorytm ten jest często spotykany w rozwiązaniach typu brute force problemów z innych dziedzin. Bazuje na nim zdecydowana większość algorytmów służących do przeglądania drzewa gry, np. min-max, czy też alpha-beta.
[edytuj] Bibliografia
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Wprowadzenie do algorytmów, WNT 2005, ISBN 83-204-3149-2