web-dev-qa-db-fra.com

Quelle est la différence entre la recherche à coût uniforme et l'algorithme de Dijkstra?

Je me demandais quelle était la différence entre recherche à coût uniforme et algorithme de Dijkstra. Ils semblent être le même algorithme.

57
Grief Coder

L'algorithme de Dijkstra, qui est peut-être mieux connu, peut être considéré comme une variante de la recherche à coût uniforme, où il n'y a pas d'état d'objectif et le traitement se poursuit jusqu'à ce que tous les nœuds aient été supprimés de la file d'attente prioritaire, c'est-à-dire jusqu'aux chemins les plus courts vers tous les nœuds ( pas seulement un nœud objectif) ont été déterminés

http://en.wikipedia.org/wiki/Uniform-cost_search#Relationship_to_other_algorithms

40
NotAUser

L'algorithme de Dijkstra recherche les chemins les plus courts de la racine à tous les autres nœuds dans un graphique, tandis que le coût uniforme recherche les chemins les plus courts en termes de coût vers un nœud cible.

En outre, le coût uniforme a moins d'espace requis, tandis que la file d'attente prioritaire est remplie "paresseusement" contrairement à Dijkstra, qui ajoute tous les nœuds à la file d'attente au démarrage avec un coût infini.

24
RobertoR

Compilation d'autres réponses par NotAUser, dreaMone et Bruno Calza

L'algorithme de Dijkstra trouve le chemin le plus court du nœud racine à tous les autres nœuds. le coût uniforme recherche les chemins les plus courts en termes de coût du nœud racine au nœud cible. La recherche de coût uniforme est l'algorithme de Dijkstra qui se concentre sur la recherche d'un seul chemin le plus court vers un seul point d'arrivée plutôt que le chemin le plus court vers chaque point.

UCS le fait en s'arrêtant dès que le point d'arrivée est trouvé. Pour Dijkstra, il n'y a pas d'état d'objectif et le traitement continue jusqu'à ce que tous les nœuds aient été supprimés de la file d'attente prioritaire, c'est-à-dire jusqu'à ce que les chemins les plus courts vers tous les nœuds (pas seulement un nœud d'objectif) aient été déterminés.

UCS a moins d'espace requis, où la file d'attente prioritaire est remplie progressivement, contrairement à Dijkstra, qui ajoute tous les nœuds à la file d'attente au démarrage avec un coût infini.

En raison des points ci-dessus, Dijkstra prend plus de temps que UCS

Le SCU est généralement formulé sur les arbres tandis que Dijkstra est utilisé sur les graphiques généraux

Djikstra n'est applicable que dans les graphiques explicites où le graphique entier est donné en entrée. Le SCU commence par le sommet source et traverse progressivement les parties nécessaires du graphique. Par conséquent, il s'applique à la fois aux graphiques explicites et aux graphiques implicites (où les états/nœuds sont générés).

15
VineetNayak28

Il y a un article qui parle des similitudes et des différences des deux.

http://www.aaai.org/ocs/index.php/SOCS/SOCS11/paper/view/4017/4357

3
Bruno Calza