Chers lecteurs, dans cet article, je vais vous guider à travers le concept de Recherche approfondie d’abord (DFS). C’est un concept de graphique qui est un problème courant dans de nombreux examens de codage compétitifs. Regardons donc la création d’une traversée DFS en utilisant Python.
Table des Matières
Qu’est-ce que la recherche en profondeur d’abord?
La recherche en profondeur d’abord est un algorithme qui utilise la structure de données de pile pour parcourir les graphiques et les arbres. Le concept de recherche en profondeur d’abord vient du mot « profondeur ». L’arbre traverse jusqu’à la profondeur d’une branche, puis revient vers le reste des nœuds.
Considérons une « pile » vide qui contient les nœuds visités pour chaque itération. Notre tâche ici est la suivante:
- Commencez au nœud racine et poussez-le sur la pile.
- Recherchez tous les nœuds adjacents de l’arborescence et sélectionnez un nœud.
- Traverse toute la branche du nœud sélectionné et pousse tous les nœuds dans la pile.
- Lorsque vous atteignez la fin d’une branche (plus de nœuds adjacents), c’est-à-dire le nième nœud feuille, reculez d’une seule étape et recherchez les nœuds adjacents du n-1ème nœud.
- S’il y a des nœuds adjacents pour le n-1ème nœud, traversez ces branches et poussez les nœuds sur la pile.
Concept de Recherche approfondie Illustré
Examinons notre exemple de graphique ci-dessous:
A est le nœud racine. Donc, puisque A est visité, nous le poussons sur la pile.
Stack : A
Allons à la branche A-B. B n’est pas visité, alors nous allons à B et poussons B sur la pile.
Stack : A B
Maintenant, nous sommes arrivés à la fin de notre branche A-B et nous passons au n-1ème nœud qui est A. Nous allons maintenant regarder le nœud adjacent de A qui est S. Visitez S et poussez-le sur la pile. Maintenant, vous devez traverser la branche S-C-D, jusqu’à la profondeur, c’est-à-dire jusqu’à D et marquer S, C, D comme visité.
Stack: A B S C D
Puisque D n’a pas d’autres nœuds adjacents, revenez à C et traversez sa branche adjacente E-H-G jusqu’à la profondeur et poussez-les sur la pile.
Stack : A B S C D E H G
En arrivant à D, il n’y a qu’un seul noeud adjacent ie F qui n’est pas visité. Poussez également F sur la pile.
Stack : A B S C D E H G F
Cette pile elle-même est la traversée du DFS.
Premier algorithme de recherche de profondeur de codage en Python
Comme vous devez le savoir, il existe de nombreuses méthodes pour représenter un graphique qui est la liste d’adjacence et la matrice d’adjacence.
Donc, dans l’exemple suivant, j’ai défini une liste d’adjacence pour chacun des nœuds de notre graphique.
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }
Note: Cette liste de contiguïté peut être saisie par l’utilisateur et n’a pas besoin d’être codée en dur.
Maintenant, nous allons définir notre fonction DFS qui prend en entrée 3 paramètres – le graphique (liste d’adjacence), un nœud et une liste des nœuds visités.
Si le nœud actuel n’est pas visité, c’est-à-dire qu’il n’est pas présent dans la liste visitée, marquez-le comme visité et ajoutez-le à la liste visitée.
Passez au nœud suivant, puis passez récursivement ce nœud dans la fonction DFS. De cette façon, chaque nœud se déplace jusqu’à la profondeur et l’imprime comme sortie DFS.
def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)
Code complet et Sortie
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)
La sortie du code ci-dessus est la suivante:
Conclusion
J’espère que vous avez suivi ce tutoriel sur l’algorithme DFS et que vous avez également pu comprendre le code et l’exemple. Essayez-le en utilisant un stylo et du papier à côté de vous pour mieux comprendre les traversées.