logo

Algorithme DFS (Depth First Search)

Dans cet article, nous discuterons de l'algorithme DFS dans la structure de données. Il s'agit d'un algorithme récursif pour rechercher tous les sommets d'une structure de données arborescente ou d'un graphe. L'algorithme de recherche en profondeur (DFS) commence par le nœud initial du graphe G et va plus loin jusqu'à ce que nous trouvions le nœud objectif ou le nœud sans enfants.

En raison de sa nature récursive, la structure de données de la pile peut être utilisée pour implémenter l'algorithme DFS. Le processus de mise en œuvre du DFS est similaire à l'algorithme BFS.

Le processus étape par étape pour implémenter le parcours DFS est donné comme suit -

  1. Tout d’abord, créez une pile avec le nombre total de sommets du graphique.
  2. Maintenant, choisissez n’importe quel sommet comme point de départ du parcours et poussez ce sommet dans la pile.
  3. Après cela, poussez un sommet non visité (adjacent au sommet en haut de la pile) vers le haut de la pile.
  4. Maintenant, répétez les étapes 3 et 4 jusqu'à ce qu'il ne reste plus aucun sommet à visiter depuis le sommet situé au sommet de la pile.
  5. S'il ne reste aucun sommet, revenez en arrière et retirez un sommet de la pile.
  6. Répétez les étapes 2, 3 et 4 jusqu'à ce que la pile soit vide.

Applications de l'algorithme DFS

Les applications de l'utilisation de l'algorithme DFS sont données comme suit -

  • L'algorithme DFS peut être utilisé pour implémenter le tri topologique.
  • Il peut être utilisé pour trouver les chemins entre deux sommets.
  • Il peut également être utilisé pour détecter des cycles dans le graphique.
  • L'algorithme DFS est également utilisé pour les énigmes à une solution.
  • DFS est utilisé pour déterminer si un graphe est biparti ou non.

Algorithme

Étape 1: SET STATUS = 1 (état prêt) pour chaque nœud de G

Étape 2: Poussez le nœud de départ A sur la pile et définissez son STATUS = 2 (état d'attente)

Étape 3: Répétez les étapes 4 et 5 jusqu'à ce que STACK soit vide

Étape 4: Pop le nœud supérieur N. Traitez-le et définissez son STATUS = 3 (état traité)

string.comparer c#

Étape 5 : Poussez sur la pile tous les voisins de N qui sont à l'état prêt (dont STATUS = 1) et mettez leur STATUS = 2 (état d'attente)

[FIN DE BOUCLE]

Étape 6 : SORTIE

Pseudocode

 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'algorithme DFS

Comprenons maintenant le fonctionnement de l'algorithme DFS à l'aide d'un exemple. Dans l’exemple donné ci-dessous, il existe un graphe orienté comportant 7 sommets.

Algorithme DFS

Commençons maintenant à examiner le graphique à partir du nœud H.

Étape 1 - Tout d'abord, poussez H sur la pile.

ajouter au tableau java
 STACK: H 

Étape 2 - POP l'élément supérieur de la pile, c'est-à-dire H, et imprimez-le. Maintenant, POUSSER tous les voisins de H sur la pile qui sont à l’état prêt.

 Print: H]STACK: A 

Étape 3 - POP l'élément supérieur de la pile, c'est-à-dire A, et imprimez-le. Maintenant, POUSSER tous les voisins de A sur la pile qui sont à l’état prêt.

 Print: A STACK: B, D 

Étape 4 - POP l'élément supérieur de la pile, c'est-à-dire D, et imprimez-le. Maintenant, POUSSER tous les voisins de D sur la pile qui sont à l’état prêt.

 Print: D STACK: B, F 

Étape 5 - POP l'élément supérieur de la pile, c'est-à-dire F, et imprimez-le. Maintenant, POUSSER tous les voisins de F sur la pile qui sont à l’état prêt.

 Print: F STACK: B 

Étape 6 - POP l'élément supérieur de la pile, c'est-à-dire B, et imprimez-le. Maintenant, POUSSER tous les voisins de B sur la pile qui sont à l’état prêt.

 Print: B STACK: C 

Étape 7 - POP l'élément supérieur de la pile, c'est-à-dire C, et imprimez-le. Maintenant, POUSSER tous les voisins de C sur la pile qui sont à l’état prêt.

 Print: C STACK: E, G 

Étape 8 - POP l'élément supérieur de la pile, c'est-à-dire G et PUSH tous les voisins de G sur la pile qui sont à l'état prêt.

 Print: G STACK: E 

Étape 9 - POP l'élément supérieur de la pile, c'est-à-dire E et PUSH tous les voisins de E sur la pile qui sont à l'état prêt.

 Print: E STACK: 

Désormais, tous les nœuds du graphique ont été parcourus et la pile est vide.

exemples de systèmes d'exploitation

Complexité de l'algorithme de recherche en profondeur d'abord

La complexité temporelle de l'algorithme DFS est O(V+E) , où V est le nombre de sommets et E est le nombre d'arêtes du graphe.

La complexité spatiale de l'algorithme DFS est O(V).

Implémentation de l'algorithme DFS

Voyons maintenant l'implémentation de l'algorithme DFS en Java.

Dans cet exemple, le graphique que nous utilisons pour démontrer le code est donné comme suit :

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