Parcours en largeur vs parcours en profondeur (BFS vs DFS) : ordre de visite, structure de données, plus courts chemins, mémoire, usages
Ce sont deux façons de visiter tous les sommets d’un graphe ou d’un arbre en suivant ses arêtes. Le parcours en largeur (BFS) s’étend par ordre de distance : il visite d’abord tous les sommets à une arête du départ, puis ceux à deux arêtes, et ainsi de suite. Le parcours en profondeur (DFS) suit un chemin aussi loin que possible, puis, arrivé à une impasse, revient en arrière et essaie un autre chemin. Le BFS s’implémente avec une file et le DFS avec une pile ou par récursion ; sur un graphe stocké en listes d’adjacence, tous deux visitent tout en un temps proportionnel au nombre de sommets plus le nombre d’arêtes. Le BFS est le choix habituel pour les plus courts chemins dans un graphe non pondéré, et le DFS pour explorer exhaustivement tous les chemins ou détecter des cycles.
| Critère | Parcours en largeur (BFS) | Parcours en profondeur (DFS) |
|---|---|---|
| Ordre de visite | Les plus proches d’abord (le moins d’arêtes depuis le départ), en s’étendant couche par couche | Descend loin le long d’un chemin, revient en arrière à une impasse et passe au chemin suivant |
| Structure de données utilisée | File (premier entré, premier sorti) | Pile (dernier entré, premier sorti) ou appels récursifs |
| Plus courts chemins | Dans un graphe non pondéré, le nombre d’arêtes au moment où un sommet est atteint pour la première fois est sa distance minimale au départ | Non garantis : un sommet peut être atteint d’abord par un détour |
| Complexité temporelle (V sommets, E arêtes) | O(V + E) avec des listes d’adjacence, O(V²) avec une matrice d’adjacence | Identique au BFS : O(V + E) avec des listes d’adjacence, O(V²) avec une matrice d’adjacence |
| Mémoire | Les sommets à visiter sont conservés dans la file ; avec beaucoup de branches, toute une couche de sommets y séjourne à la fois, si bien qu’elle devient grande | En version récursive, seuls les sommets du chemin courant sont nécessaires : la mémoire croît avec la profondeur du chemin ; une recherche très profonde peut faire déborder la pile d’appels |
| Garantie de trouver une solution | Toujours trouvée si le nombre de sommets est fini ; même si l’espace de recherche croît sans limite, les solutions peu profondes sont trouvées en premier | Toujours trouvée dans un graphe fini si les sommets visités sont mémorisés ; lorsque les chemins peuvent s’approfondir sans limite, il peut continuer à descendre un même chemin sans jamais revenir |
| Ordre de parcours d’un arbre | Parcours par niveaux (niveau par niveau depuis la racine, de gauche à droite) | Parcours préfixe, infixe et postfixe |
| Usages typiques | Plus courts chemins dans un graphe non pondéré, nombre minimal de coups dans un labyrinthe, nombre de sauts atteints dans un réseau | Recherche exhaustive dans les labyrinthes et les casse-têtes (backtracking), recherche des composantes connexes et des cycles, tri topologique |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.