web-dev-qa-db-fra.com

Structure de données graphiques: DFS vs BFS?

si on nous pose un problème de graphe, comment savoir s'il faut utiliser l'algorithme bfs ou dfs ??? .__ ou quand utiliser un algorithme dfs ou un algorithme bfs . Quels sont les avantages et inconvénients de l'un par rapport à l'autre?

49
Jony

BFS utilisera plus de mémoire en fonction du facteur de branchement ... cependant, BFS est un algorithme complet ... ce qui signifie que si vous l'utilisez pour rechercher quelque chose dans la profondeur la plus faible possible, BFS vous donnera la solution optimale . La complexité de l'espace BFS est O(b^d)... le facteur de ramification élevé à la profondeur (peut être BEAUCOUP de mémoire).

DFS, quant à lui, est bien meilleur en termes d’espace mais il peut trouver une solution sous-optimale. Cela signifie que si vous recherchez simplement un chemin d'un sommet à un autre, vous pouvez trouver la solution sous-optimale (et vous y arrêter) avant de trouver le chemin le plus court réel. La complexité de l'espace DFS est O(|V|)... Ce qui signifie que le chemin le plus long possible est le plus long possible.

Ils ont la même complexité temporelle.

En termes d'implémentation, BFS est généralement implémenté avec Queue, alors que DFS utilise un Stack.

76
Polaris878

largeur recherche d'abord la fratrie. profondeur cherche évidemment d’abord les enfants. Donc, je suppose que cela dépend du type de recherche que vous souhaitez effectuer. Les recherches de type de relation dans des champs se prêteraient probablement à bfs, où hiérarchique (arbres, dossiers, rangs, etc.) conviendrait mieux comme dfs.

6
dhoss

Les deux traversées de graphique promettent une chose: une traversée complète du graphique, visitant tous les sommets du graphique. Si vous n'avez pas de contrainte de mémoire, DFS est un bon choix, car BFS occupe beaucoup d'espace. Donc, choisir entre ces deux dépend de vos besoins. 

Vous voulez trouver les composants (fortement /) connectés du graphique? ou résoudre le labyrinthe ou le sudoku? Utilisez DFS. Si vous regardez de plus près, la précommande, la post-commande et la commande sont toutes des variantes du DFS. Donc, oui, ce sont des applications intéressantes. 

Si vous souhaitez vérifier si un graphique est bipartite, recherchez le chemin le plus court entre deux nœuds ou applications nécessitant de telles tâches. 

4
madCode

Dans bfs, la file d'attente est utilisée tandis que dans dfs, la pile sert à stocker les sommets en fonction du parcours du graphe.
2- dans le processus bfs se fait de niveau en niveau (selon le graphe dirigé ou non) Tandis que dans dfs, le processus s’effectue de manière approfondie appliquer le retour en arrière du dernier noeud au noeud racine).

2
anshu shrivastavs

BFS est extrêmement efficace pour les chemins les plus courts, contrairement à DFS.

0
Akash I