Contents Menu Expand Light mode Dark mode Auto light/dark mode
Madoc
Logo
  • Python
    • Pep8
      • Flake8
        • Initialisation
    • Library
      • Pandas
      • Fake
      • BeautifulSoup
        • Composants
        • Fonctionnalitées
        • Exemple Beautifulsoup
    • Environnement virtuel
    • Algorithme
      • Expert
        • Analyse arithmétique
          • Bissection
          • Intersection
          • Lu decomposition
          • Newton method
        • Arbre binaire
        • Graphs
          • Breadth-First Search
          • Depth-First Search
  • Django
    • DRF
    • Wagtail
    • Cookiecutter
    • uv
      • Documentation technique
      • Utilisation
    • Initialisation
  • Docker
    • Docker-compose
    • Dockerfile
    • Dockerhub
    • Installation
  • Github
    • Actions
    • Initialisation
      • Création d’un compte
      • Repository
    • Branches
  • Sentry
  • Circleci
  • Sphinx
  • Pytest
  • Docstrings
    • Google
    • Numpy/Scipy
  • Youtube
  • Data
    • Nouvelles perspectives
      • Demander
      • Préparer
      • Traiter
      • Analyser
      • Partager
      • Agir
    • Compétences analytiques
Back to top

Depth-First Search#

La recherche en profondeur (Depth-First Search ou DFS en anglais) est un algorithme utilisé pour parcourir ou rechercher des structures de données arborescentes ou de graphe. Contrairement à BFS, DFS explore autant que possible le plus loin le long d’une branche avant de revenir en arrière.

  • Commencez par un nœud de départ et empilez-le sur une pile.

  • Marquez le nœud de départ comme exploré.

  • Tant que la pile n’est pas vide.
    • Dépilez un nœud de la pile (celui le plus récemment empilé).

    • Parcourez tous les voisins non explorés de ce nœud.

    • Pour chaque voisin non exploré, marquez-le comme exploré et empilez-le sur la pile.

  • Répétez l’étape 3 jusqu’à ce que la pile soit vide.

  • DFS explore autant que possible le plus loin le long d’une branche avant de revenir en arrière. Cela signifie qu’il explore chaque branche aussi loin que possible avant de passer à une autre branche.

  • DFS est généralement implémenté à l’aide d’une pile (ou de la récursivité), ce qui signifie qu’il utilise moins de mémoire que BFS pour les graphes très profonds.

Trouver le chemin le plus profond dans un arbre ou un graphe.

Détecter les cycles dans un graphe.

Trouver des solutions à des problèmes de recherche, comme le problème du voyageur de commerce.

Complexité temporelle : O(V + E), où V est le nombre de sommets (nœuds) et E est le nombre d’arêtes dans le graphe.

Complexité spatiale : O(V), où V est le nombre de sommets. Cela est dû à l’utilisation de la pile pour stocker les nœuds à explorer.

     A
   /   \
  B     C
 / \   / \
D   E F   G

En partant du nœud A, DFS explorerait la branche de gauche jusqu’au nœud D, puis reviendrait en arrière pour explorer les autres nœuds de cette branche, avant de passer à la branche de droite.

La recherche en profondeur est un algorithme fondamental pour parcourir et rechercher des graphes. Sa capacité à explorer les branches en profondeur le rend utile dans de nombreuses applications, telles que la recherche de solutions de problèmes et la détection de cycles dans les graphes.

Fonction#

 1def dfs(graph, start):
 2"""
 3Perform Depth-First Search (DFS) on a graph starting from a given node.
 4
 5Args:
 6    graph (dict): The graph represented as a dictionary where keys are nodes and values are lists of neighboring nodes.
 7    start: The starting node for DFS traversal.
 8
 9Returns:
10    set: A set containing all nodes explored during DFS traversal.
11"""
12explored, stack = set(), [start]
13explored.add(start)
14while stack:
15    current_node = stack.pop()  # The difference from BFS is popping the last element here instead of the first one
16    for neighbor in graph[current_node]:
17        if neighbor not in explored:
18            explored.add(neighbor)
19            stack.append(neighbor)
20return explored
21
22
23G = {'A': ['B', 'C'],
24    'B': ['A', 'D', 'E'],
25    'C': ['A', 'F'],
26    'D': ['B'],
27    'E': ['B', 'F'],
28    'F': ['C', 'E']}
print(dfs(G, 'A'))
{'D', 'E', 'C', 'F', 'A', 'B'}
Next
Django
Previous
Breadth-First Search
Copyright © 2024-2026, Laurent Jouron
Made with Sphinx and @pradyunsg's Furo
On this page
  • Depth-First Search
    • Fonction