logo

Algorisme DFS (Depth First Search).

En aquest article, parlarem de l'algorisme DFS a l'estructura de dades. És un algorisme recursiu per cercar tots els vèrtexs d'una estructura de dades d'arbre o d'un gràfic. L'algorisme de cerca en profunditat (DFS) comença amb el node inicial del gràfic G i s'aprofundeix fins que trobem el node objectiu o el node sense fills.

A causa de la naturalesa recursiva, l'estructura de dades de pila es pot utilitzar per implementar l'algorisme DFS. El procés d'implementació del DFS és similar a l'algorisme BFS.

El procés pas a pas per implementar el recorregut DFS es mostra de la següent manera:

  1. Primer, creeu una pila amb el nombre total de vèrtexs del gràfic.
  2. Ara, trieu qualsevol vèrtex com a punt de partida de la travessa i introduïu aquest vèrtex a la pila.
  3. Després d'això, empeny un vèrtex no visitat (adjacent al vèrtex de la part superior de la pila) a la part superior de la pila.
  4. Ara, repetiu els passos 3 i 4 fins que no quedi cap vèrtex per visitar des del vèrtex de la part superior de la pila.
  5. Si no queda cap vèrtex, torna enrere i treu un vèrtex de la pila.
  6. Repetiu els passos 2, 3 i 4 fins que la pila estigui buida.

Aplicacions de l'algorisme DFS

Les aplicacions per utilitzar l'algorisme DFS es donen de la següent manera:

  • L'algorisme DFS es pot utilitzar per implementar l'ordenació topològica.
  • Es pot utilitzar per trobar els camins entre dos vèrtexs.
  • També es pot utilitzar per detectar cicles en el gràfic.
  • L'algorisme DFS també s'utilitza per a trencaclosques d'una solució.
  • DFS s'utilitza per determinar si un gràfic és bipartit o no.

Algorisme

Pas 1: SET STATUS = 1 (estat preparat) per a cada node de G

Pas 2: Premeu el node inicial A a la pila i configureu el seu STATUS = 2 (estat d'espera)

Pas 3: Repetiu els passos 4 i 5 fins que la PILA estigui buida

Pas 4: Obre el node superior N. Processa'l i defineix el seu STATUS = 3 (estat processat)

Pas 5: Premeu a la pila tots els veïns de N que es troben a l'estat preparat (l'estat dels quals = 1) i establiu el seu STATUS = 2 (estat d'espera)

[FI DEL BULE]

Pas 6: SORTIR

Pseudocodi

 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() 

Exemple d'algorisme DFS

Ara, anem a comprendre el funcionament de l'algorisme DFS utilitzant un exemple. En l'exemple que es mostra a continuació, hi ha un gràfic dirigit amb 7 vèrtexs.

Algorisme DFS

Ara, comencem a examinar el gràfic a partir del node H.

cadena de comparació de java

Pas 1 - Primer, premeu H a la pila.

 STACK: H 

Pas 2 - OPLICA l'element superior de la pila, és a dir, H, i imprimeix-lo. Ara, empeny tots els veïns de H a la pila que es troben en estat llest.

 Print: H]STACK: A 

Pas 3 - OUP l'element superior de la pila, és a dir, A, i imprimiu-lo. Ara, empeny tots els veïns d'A a la pila que es troben en estat preparat.

 Print: A STACK: B, D 

Pas 4 - OUP l'element superior de la pila, és a dir, D, i imprimiu-lo. Ara, empeny tots els veïns de D a la pila que es troben en estat llest.

exemple de dades json
 Print: D STACK: B, F 

Pas 5 - OBRE l'element superior de la pila, és a dir, F, i imprimiu-lo. Ara, empeny tots els veïns de F a la pila que es troben en estat llest.

 Print: F STACK: B 

Pas 6 - OUP l'element superior de la pila, és a dir, B, i imprimiu-lo. Ara, empeny tots els veïns de B a la pila que es troben en estat llest.

 Print: B STACK: C 

Pas 7 - POP l'element superior de la pila, és a dir, C, i imprimiu-lo. Ara, empeny tots els veïns de C a la pila que es troben en estat llest.

 Print: C STACK: E, G 

Pas 8 - POP l'element superior de la pila, és a dir, G i PUSH tots els veïns de G a la pila que estan en estat preparat.

 Print: G STACK: E 

Pas 9 - POP l'element superior de la pila, és a dir, E i PUSH tots els veïns d'E a la pila que estan en estat preparat.

 Print: E STACK: 

Ara, s'han travessat tots els nodes del gràfic i la pila està buida.

Complexitat de l'algoritme de cerca en profunditat

La complexitat temporal de l'algorisme DFS és O(V+E) , on V és el nombre de vèrtexs i E és el nombre d'arestes del gràfic.

La complexitat espacial de l'algorisme DFS és O(V).

Implementació de l'algorisme DFS

Ara, vegem la implementació de l'algorisme DFS a Java.

En aquest exemple, el gràfic que estem utilitzant per demostrar el codi es dóna de la següent manera:

Algorisme 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;>