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, przeszukiwanie zaczynając od A, odwiedzi się węzły w tej kolejności:
A, B, D, B, F, E, F, B, A, C, G.
[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] Przykład w C++
Implementacja DFS w C++:
void DFS(vector< vector<int> > &graf,int wierzcholek,vector<bool> &uzyto) { vector<int>::iterator iter; //iterator po sąsiadach wierzchołka uzyto[wierzcholek] = true; //kolorujemy odwiedzony wierzchołek //na tym węźle jesteśmy cout <<wierzcholek<<"\n"; //przejście po sąsiadach wierzchołka for (iter=graf[wierzcholek].begin(); iter!=graf[wierzcholek].end(); iter++) { //jeżeli wierzchołek nie odwiedzony, to wywołujemy DFS rekurencyjnie if (uzyto[*iter] == false) DFS(graf,*iter,uzyto); } } void DFS(vector< vector<int> > &graf, //wektor wektorów, w którym zapisujemy sąsiadów wierzchołka int wierzcholek=0 //wierzchołek, od którego startujemy ) { vector <bool> uzyto(graf.size(),false); DFS(graf,wierzcholek,uzyto); }
[edytuj] Bibliografia
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Wprowadzenie do algorytmów, WNT 2005, ISBN 83-204-3149-2
| Obama zamierza stworzyć 2,5 mln miejsc pracy |
|
Amerykański prezydent-elekt Barack Obama oświadczył w sobotę, iż zamierza w ciągu pierwszych dwóch lat kadencji stworzyć 2,5 mln miejsc pracy.
|
| APEC: wolny handel pozwoli zwalczyć kryzys |
|
Przywódcy państw Azji i obu Ameryk, uczestniczący w szczycie państw regionu w Limie, uznali w sobotę, że wolny handel i reformy międzynarodowych instytucji kredytowych pozwolą światu na uniknięcie głębszego kryzysu.
|
| "Bogate kraje wykupują ziemię w krajach biednych" |
|
Rządy i narodowe korporacje z bogatych państw wykupują miliony hektarów ziemi uprawnej w krajach rozwijających się, by zapewnić sobie dostawy żywności w dłuższym okresie - pisze w sobotnim wydaniu brytyjski dziennik "The Guardian".
|
| Berlusconi: nadchodzi kryzys, który może być bardzo głęboki |
|
Premier Włoch Silvio Berlusconi po raz pierwszy ostrzegł swych rodaków, że nadchodzi kryzys, który - jak dodał - może być "bardzo głęboki".
|
| Szczyt APEC: przywódcy 21 państw radzą w Limie jak pokonać kryzys |
|
Przywódcy 21 krajów z regionu Azji i Pacyfiku, którzy rozpoczynają w sobotę wieczorem (czasu polskiego) dwudniowe obrady w Limie, uznają zagrożenie dla świata, jakie stanowi obecny kryzys gospodarczy.
|
