Vous avez raison de dire que les deux algorithmes de Dijkstra (chemins les plus courts d'un seul nœud de démarrage) et Prim (arbre couvrant d' épaisseur minimale à partir d'un nœud donné) ont une structure très similaire. Ils sont à la fois gourmands (prennent le meilleur avantage du point de vue actuel) et construisent un arbre couvrant le graphique.
La valeur qu'ils minimisent cependant est différente. Dijkstra sélectionne comme bord suivant celui qui mène de l’arbre à un nœud qui n’a pas encore été choisi le plus près du nœud de départ. (Ensuite, avec ce choix, les distances sont recalculées.) Prim choisit comme bord le plus court menant à l’arbre construit jusqu’à présent. Ainsi, les deux algorithmes ont choisi un "bord minimal". La principale différence est la valeur choisie pour être minimale. Pour Dijkstra, il s'agit de la longueur du chemin complet du nœud de départ au nœud candidat. Pour Prim, il s'agit simplement du poids de cette arête unique.
Pour voir la différence, vous devriez essayer de construire quelques exemples pour voir ce qui se passe. C'est vraiment instructif. L’exemple le plus simple montrant un comportement différent est un triangle avec des arêtes et de longueur 2, tandis que a une longueur de 1. À partir de Dijkstra choisira et (donnant deux chemins de longueur 2) tandis que Prim choisit et (donnant le spanning tree de poids 3).x,y,z{x,y}{x,z}{y,z}x{x,y}{x,z}{x,y}{y,z}
En ce qui concerne Kruskal , c'est légèrement différent. Il résout l'arborescence minimale, mais lors de l'exécution, il choisit les arêtes qui ne peuvent pas former d'arbre, elles évitent simplement les cycles. Les solutions partielles peuvent donc être déconnectées. À la fin, vous obtenez un arbre.