See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Przeszukiwanie w głąb - Wikipedia, wolna encyklopedia

Przeszukiwanie w głąb

Z Wikipedii

Niniejszy artykuł jest częścią cyklu teoria grafów.




Najważniejsze pojęcia
graf
podgraf
cykl
klika
stopień wierzchołka
dopełnienie grafu
obwód grafu
pokrycie wierzchołkowe
liczba chromatyczna
indeks chromatyczny
izomorfizm grafów
homeomorfizm grafów


Wybrane klasy grafów
graf pełny
graf spójny
drzewo
graf dwudzielny
graf regularny
graf eulerowski
graf hamiltonowski
graf planarny


Algorytmy grafowe
A*
Bellmana-Forda
Breadth-first search
Depth-first search
Dijkstry
Fleury'ego
Floyda-Warshalla
Johnsona
Kruskala
Prima
przeszukiwanie grafu
najbliższego sąsiada


Zagadnienia przedstawiane jako problemy grafowe
problem komiwojażera
problem chińskiego listonosza
problem kojarzenia małżeństw


Inne zagadnienia
kod Graya
diagram Hassego


edytuj ten szablon
Przeszukiwanie w głąb
Kolejność odwiedzania  węzłów
Kolejność odwiedzania węzłów
Podstawowe informacje
Klasa algorytmu: przeszukiwania
Struktura danych: graf, drzewo
Złożoność czasowa: O( | V | + | E | )
Złożoność pamięciowa: O( | V | + | E | )
Kompletny: tak

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:

Image:graph.traversal.example.png.

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:

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


Zalążek artykułu To jest tylko zalążek artykułu związanego z informatyką. Jeśli potrafisz, rozbuduj go.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -