Przeszukiwanie w głąb (ang. Depth-first search, w skrócie DFS) – algorytm przeszukiwania grafu. Przeszukiwanie w głąb polega na badaniu wszystkich krawędzi wychodzących z podanego wierzchołka. Po zbadaniu wszystkich krawędzi wychodzących z danego wierzchołka algorytm powraca do wierzchołka, z którego dany wierzchołek został odwiedzony.
Przykład thumb|left|Graf wykorzystany w przykładzie Gdybyśmy podany na obrazku graf chcieli przejść wykorzystując algorytm przeszukiwania w głąb, zaczynając od wierzchołka A, to węzły zostałyby odwiedzone w następującej kolejności (w nawiasach podano wierzchołki do których algorytm powraca): A, B, D, (B), F, E, (F), (B), (A), C, G, (C), (A).
Algorytm function VisitNode(u): oznacz u jako odwiedzony dla każdego wierzchołka v na liście sąsiedztwa u: jeżeli v nieodwiedzony: VisitNode(v) function DepthFirstSearch(Graf G): dla każdego wierzchołka u z grafu G: oznacz u jako nieodwiedzony dla każdego wierzchołka u z grafu G: jeżeli u nieodwiedzony: VisitNode(u)
Właściwości Złożoność pamięciowa Złożoność pamięciowa przeszukiwania w głąb w przypadku drzewa jest o wiele mniejsza niż przeszukiwania wszerz, gdyż algorytm w każdym momencie wymaga zapamiętania tylko ścieżki od korzenia do bieżącego węzła, podczas gdy przeszukiwanie wszerz wymaga zapamiętywania wszystkich węzłów w danej odległości od korzenia, co zwykle rośnie wykładniczo w funkcji długości ścieżki.
Złożoność czasowa Złożoność czasowa algorytmu jest uzależniona od liczby wierzchołków oraz liczby krawędzi. Algorytm musi odwiedzić wszystkie wierzchołki oraz wszystkie krawędzie, co oznacza, że złożoność wynosi O(|V|+|E|).
Zupełność (kompletność) Algorytm jest zupełny (czyli znajduje rozwiązanie lub informuje, że ono nie istnieje) dla drzew skończonych. Grafy skończone wymagają oznaczania już odwiedzonych wierzchołków. Dla grafów nieskończonych nie jest zupełny.
Zastosowania algorytmu Algorytm stosowany jest: do wyznaczania silnych spójnych składowych grafu skierowanego w algorytmie sortowania topologicznego skierowanego grafu acyklicznego sprawdzania, czy istnieje ścieżka między dwoma wierzchołkami w grafie (badanie spójności grafu).
Implementacja Zobacz przykłady implementacji tego algorytmu na stronie Wikibooks
Zobacz też Przeszukiwanie wszerz
Przypisy
Linki zewnętrzne
Depth-first search , Encyclopedia of Mathematics, encyclopediaofmath.org [dostęp 2025-12-14].
Kategoria:Algorytmy grafowe Kategoria:Algorytmy wyszukiwania