logo

Algoritmul DFS (Depth First Search).

În acest articol, vom discuta despre algoritmul DFS în structura datelor. Este un algoritm recursiv pentru a căuta toate nodurile unei structuri de date arborescente sau ale unui grafic. Algoritmul de căutare în profunzime (DFS) începe cu nodul inițial al graficului G și merge mai adânc până când găsim nodul obiectiv sau nodul fără copii.

Datorită naturii recursive, structura de date a stivei poate fi utilizată pentru a implementa algoritmul DFS. Procesul de implementare a DFS este similar cu algoritmul BFS.

Procesul pas cu pas pentru implementarea traversării DFS este prezentat după cum urmează -

  1. Mai întâi, creați o stivă cu numărul total de vârfuri din grafic.
  2. Acum, alegeți orice vârf ca punct de plecare al traversării și împingeți acel vârf în stivă.
  3. După aceea, împingeți un vârf nevizitat (adiacent vârfului din partea de sus a stivei) în partea de sus a stivei.
  4. Acum, repetați pașii 3 și 4 până când nu mai rămân vârfuri de vizitat de la vârful din vârful stivei.
  5. Dacă nu mai rămâne niciun vârf, întoarceți-vă și scoateți un vârf din stivă.
  6. Repetați pașii 2, 3 și 4 până când stiva este goală.

Aplicații ale algoritmului DFS

Aplicațiile utilizării algoritmului DFS sunt prezentate după cum urmează -

  • Algoritmul DFS poate fi utilizat pentru a implementa sortarea topologică.
  • Poate fi folosit pentru a găsi căile dintre două vârfuri.
  • Poate fi folosit și pentru a detecta ciclurile din grafic.
  • Algoritmul DFS este folosit și pentru puzzle-uri cu o soluție.
  • DFS este utilizat pentru a determina dacă un grafic este bipartit sau nu.

Algoritm

Pasul 1: SET STATUS = 1 (stare gata) pentru fiecare nod din G

Pasul 2: Apăsați nodul de pornire A pe stivă și setați-i STATUS = 2 (starea de așteptare)

Pasul 3: Repetați pașii 4 și 5 până când STACK este gol

char la șir în java

Pasul 4: Pop nodul superior N. Procesați-l și setați-i STATUS = 3 (starea procesată)

Pasul 5: Apăsați pe stivă toți vecinii lui N care sunt în starea pregătită (a căror STARE = ​​1) și setați-le STARE = ​​2 (starea de așteptare)

[Sfârșitul buclei]

Pasul 6: IEȘIRE

Pseudo cod

 DFS(G,v) ( v is the vertex where the search starts ) Stack S := {}; ( start with an empty stack ) for each vertex u, set visited[u] := false; push S, v; while (S is not empty) do u := pop S; if (not visited[u]) then visited[u] := true; for each unvisited neighbour w of uu push S, w; end if end while END DFS() 

Exemplu de algoritm DFS

Acum, să înțelegem funcționarea algoritmului DFS folosind un exemplu. În exemplul de mai jos, există un grafic direcționat având 7 vârfuri.

Algoritmul DFS

Acum, să începem să examinăm graficul pornind de la Nodul H.

Pasul 1 - Mai întâi, împingeți H pe stivă.

java localdatetime
 STACK: H 

Pasul 2 - POP elementul de sus din stivă, adică H, și imprimați-l. Acum, împingeți toți vecinii lui H pe stiva care sunt în stare gata.

 Print: H]STACK: A 

Pasul 3 - POP elementul de sus din stivă, adică A, și imprimați-l. Acum, împingeți toți vecinii lui A pe stiva care sunt în stare gata.

 Print: A STACK: B, D 

Pasul 4 - POP elementul de sus din stivă, adică D, și imprimați-l. Acum, împingeți toți vecinii lui D pe stiva care sunt în stare gata.

 Print: D STACK: B, F 

Pasul 5 - POP elementul de sus din stivă, adică F, și imprimați-l. Acum, împingeți toți vecinii lui F pe stiva care sunt în stare gata.

 Print: F STACK: B 

Pasul 6 - POP elementul de sus din stivă, adică B, și imprimați-l. Acum, împingeți toți vecinii lui B pe stiva care sunt în stare gata.

 Print: B STACK: C 

Pasul 7 - POP elementul de sus din stivă, adică C, și imprimați-l. Acum, împingeți toți vecinii lui C pe stiva care sunt în stare gata.

 Print: C STACK: E, G 

Pasul 8 - POP elementul de sus din stivă, adică G și împingeți toți vecinii lui G pe stiva care sunt în stare gata.

 Print: G STACK: E 

Pasul 9 - POP elementul de sus din stivă, adică E și împingeți toți vecinii lui E pe stiva care sunt în stare gata.

 Print: E STACK: 

Acum, toate nodurile graficului au fost parcurse, iar stiva este goală.

ctc formă completă

Complexitatea algoritmului de căutare în profunzime

Complexitatea de timp a algoritmului DFS este O(V+E) , unde V este numărul de vârfuri și E este numărul de muchii din grafic.

Complexitatea spațială a algoritmului DFS este O(V).

Implementarea algoritmului DFS

Acum, să vedem implementarea algoritmului DFS în Java.

În acest exemplu, graficul pe care îl folosim pentru a demonstra codul este dat după cum urmează -

Algoritmul DFS
 /*A sample java program to implement the DFS algorithm*/ import java.util.*; class DFSTraversal { private LinkedList adj[]; /*adjacency list representation*/ private boolean visited[]; /* Creation of the graph */ DFSTraversal(int V) /*&apos;V&apos; is the number of vertices in the graph*/ { adj = new LinkedList[V]; visited = new boolean[V]; for (int i = 0; i <v; i++) adj[i]="new" linkedlist(); } * adding an edge to the graph void insertedge(int src, int dest) { adj[src].add(dest); dfs(int vertex) visited[vertex]="true;" *mark current node as visited* system.out.print(vertex + ' '); iterator it="adj[vertex].listIterator();" while (it.hasnext()) n="it.next();" if (!visited[n]) dfs(n); public static main(string args[]) dfstraversal dfstraversal(8); graph.insertedge(0, 1); 2); 3); graph.insertedge(1, graph.insertedge(2, 4); graph.insertedge(3, 5); 6); graph.insertedge(4, 7); graph.insertedge(5, system.out.println('depth first traversal for is:'); graph.dfs(0); < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/28/dfs-algorithm-3.webp" alt="DFS algorithm"> <h3>Conclusion</h3> <p>In this article, we have discussed the depth-first search technique, its example, complexity, and implementation in the java programming language. Along with that, we have also seen the applications of the depth-first search algorithm.</p> <p>So, that&apos;s all about the article. Hope it will be helpful and informative to you.</p> <hr></v;>