web-dev-qa-db-fra.com

Quelle est la différence entre BFS et les algorithmes de Dijkstra lors de la recherche du chemin le plus court?

Je lisais sur les algorithmes Graph et je suis tombé sur ces deux algorithmes.

J'ai beaucoup cherché à ce sujet mais je n'ai pas obtenu de réponse satisfaisante!

J'ai un doute que quelle est la différence entre l'algorithme de Dijkstra et BFS tout en recherchant le chemin le plus court?

tout en utilisant BFS pour trouver le chemin le plus court dans un graphique ce que nous faisons est

Nous découvrons tous les sommets connectés, les ajoutons dans la file d'attente et maintenons également la distance de la source à ce sommet. Maintenant, si nous trouvons un chemin de la source à ce sommet avec encore moins de distance, nous le mettons à jour!

C'est exactement la même chose que nous faisons dans l'algorithme de Dijkstra! alors quelle est la différence entre Dijkstra et BFS? Et alors pourquoi les complexités temporelles de ces algorithmes sont-elles si différentes?

Si quelqu'un peut l'expliquer à l'aide d'un pseudo-code, je vous en serai très reconnaissant!

Je sais que je manque quelque chose! Aidez-moi!

40
harrythomas

La recherche en largeur est juste l'algorithme de Dijkstra avec tous les poids de bord égaux à 1.

L'algorithme de Dijkstra est une recherche conceptuellement étendue qui respecte les coûts Edge.

Le processus d'exploration du graphique est structurellement le même dans les deux cas.

77
Timothy Shields

Blockquote tout en utilisant BFS pour trouver le chemin le plus court dans un graphique, nous découvrons tous les sommets connectés, les ajoutons dans la file d'attente et maintenons également la distance de la source à ce sommet. Maintenant, si nous trouvons un chemin de la source à ce sommet avec encore moins de distance, nous le mettons à jour!

Nous ne maintenons pas de distance en BFS. C'est pour la découverte de nœuds. Nous les avons donc mis dans une file d'attente générale et les avons fait éclater. contrairement à Dijikstra où nous mettons le poids cumulé du nœud (après relaxation) dans une file d'attente prioritaire et pop la distance min.

Donc, BFS fonctionnerait comme dijikstra dans un graphique de poids égal, car.

la complexité varie en raison de l'utilisation de la file d'attente simple et de la file d'attente prioritaire.

2
tanweer alam