Caută în profunzime
Caută în profunzime | |
---|---|
Pentru navigare Node | |
Clasă | Algoritm de căutare |
Structură de date | Grafic |
Cel mai rău caz din punct de vedere temporal | |
Cel mai rău caz spațial | |
Optim | Nu |
Costum de afaceri | Nu |
În teoria grafurilor , în profunzime de cercetare (în limba engleză adancime de căutare, în acronimul DFS) este un algoritm de căutare pe copaci și grafice . Spre deosebire de căutare în lățime , are caracteristica de a fi intrinsec recursive.
Definiție
Astecii derivă din faptul că, într-un copac, chiar înainte de a fi vizitat nodurile din primele generații, algoritmul se poate găsi de a vizita nodurile departe de rădăcină, astfel merge „în profunzime“. Nu întâmplător, în cazul în care rula pe un grafic, identifică un copac algoritm care este un subgraf (adică, acesta conține toate nodurile și toate și numai arcele care au fost urmate). Putem vedea algoritmul ca o largă vizită în care în loc de o coadă folosim o stivă (adică în loc să adauge elemente noi la partea de jos le adăuga la partea de sus). Strategia de căutare explorează graficul merge, în fiecare moment al execuției algoritmului, cât mai profund posibil: arcele graficului sunt explorate pornind de la ultimul vârf descoperit că încă mai are arcade neexplorate care ies din ea. După explorarea tuturor marginilor neexplorate ale Vertex este terminat du-te înapoi pentru a explora toate arcele de ieșire pornind de la vârful din care „Au fost anterior descoperite. Procesul de explorare continuă până când toate nodurile din grafic au fost explorate. Subgraful predecesorilor, care este generat de vizita de adâncime, poate fi alcătuită din mai multe copaci : această subgrafic este definită ca o pădure DFS, prin urmare , compus din mai multe arbori DFS. DFS de căutare, în plus față de generarea DFS mărcilor forestiere fiecare vârf cu informații temporale precise, în special actualizări două etichete pentru fiecare nod: care înregistrările atunci când vârful generic a fost descoperit și care de înregistrări atunci când întreaga lista de adiacenta a (adică toate nodurile care pot fi atinse de ea). Nodurile sunt colorate diferit , în funcție de caz: alb, culoarea pe care fiecare nod preia înainte de timpul său , Gri între timp și și negru în cele ce urmează. Pentru fiecare nod De asemenea, se aplică .
Realizare
Punerea în aplicare a algoritmului constă în două proceduri: o procedură care începe căutarea și are grijă de colorare toate nodurile graficului cu alb, resetarea contorul de timp la nivel mondial și selectând fiecare singur nod al graficului. Pentru fiecare singur nod selectat o a doua procedură este pornit, care are sarcina de a efectua vizita efectivă.
DFS (G) pentru fiecare nod u în V [G] do culoare [u] ← alb π [u] ← zero timp ← 0 pentru fiecare nod u în V [G] do în cazul în care culoarea [u] = alb apoi DFS-vizită (u)
Procedura pentru a vizita nodul are grijă de colorat corespunzător toate nodurile vizitate pornind de la (nodurile din lista de adiacenta ), Pentru a actualiza valorile de timp și de a construi pădurea DFS.
DFS-vizită (u) culoare [u] ← gri d [u] ← timp ← timp + 1 pentru fiecare vârf v în Adj [u] do dacă culoarea [v] = alb atunci π [v] ← u DFS-vizită (v) culoare [u] ← negru f [u] ← timp ← timp + 1
Complexitate
Procedura DFS necesită timp de execuție a cu excepția timpului pentru executarea DFS-vizită. Această din urmă procedură se numește o singură dată pentru fiecare nod și ciclul său se execută exact ori, prin urmare, în total:
din
Deci, timpul total de execuție este egal cu .
Ordin
Având de a efectua operațiuni pe fiecare nod vizitat, algoritmul se poate comporta în 3 moduri diferite:
- efectuează operația, apoi se amintesc pe copii (precomanda)
- se amintesc pe copii, apoi să efectueze operațiunea (post-comandă)
- se amintesc pe unii copii, efectua operația, se amintesc asupra copiilor rămași (vizită în ordine, interesant în arbori binari sau în grafice cu liste de adiacenta ordonate într - un anumit mod)
implementare Python
pentru grafice
Vizita def (vertex):
Summit - ul. a vizitat = Adevărat
pentru adiacente în vertex. adiacente:
în cazul în care nu este adiacent. vizitat:
Vizita (adiacentă)
pentru copaci
Vizita def (vertex):
pentru adiacente în vertex. adiacente:
Vizita (adiacentă)
Notă
Bibliografie
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Introducere în algoritmi, Jackson Books, 2003, ISBN 88-256-1421-7 .
Elemente conexe
Alte proiecte
- Wikimedia Commons conține imagini sau alte fișiere despre cercetarea profundă