Les algorithmes de Kruskal et Prim produisent-ils le même arbre couvrant minimum?

9

En supposant que les bords ne sont pas orientés, ont un poids unique et aucun chemin négatif, ces algorithmes produisent-ils les mêmes arbres couvrant minimum?

Death_by_Ch0colate
la source
3
Oui, et ils semblent produire le même MST. Mais ce n'est pas définitif.
Death_by_Ch0colate
2
Ok, c'est vrai, je vérifie juste.
Evil
La réponse reste positive même si l'on supprime la condition "pas de chemin négatif"
John L.

Réponses:

13

Trouvé ceci qui indique que si toutes les conditions que j'ai mentionnées ci-dessus sont remplies, un graphique a nécessairement un MST unique. Par conséquent, en termes de ma question, les algorithmes de Kruskal et Prim produisent nécessairement le même résultat.

Death_by_Ch0colate
la source
7

Si le MST est unique, tous les algorithmes vont forcément le produire.

Si le MST n'est pas unique, les sorties peuvent différer en raison de différents ordres de traitement des nœuds (même deux implémentations distinctes du même algorithme peuvent), mais les poids totaux seront identiques. Dans ce cas, le MST est un terme impropre.

Yves Daoust
la source
Ils le pourraient certainement, mais le font- ils?
Raphael
4
@Raphael: J'ai répondu à cela.
Yves Daoust
1
@Yves Non, tu ne l'as pas fait. Vous avez dit que " peut-être " n'est pas une garantie. Par exemple, si vous avez des algorithmes de tri, et ils sont stables, ils ne produisent la même sortie, quel que soit l'algorithme utilisé. S'ils ne sont pas stables, ils pourraient produire les mêmes résultats. La question est donc de savoir si ces algorithmes ont un sentiment de stabilité par rapport au sujet et l'exposent.
luk32
@ luk32: avez-vous lu "même deux implémentations distinctes du même algorithme peuvent"? Soit dit en passant, un algorithme de tri stable produit la même sortie car il est défini de manière unique, ils n'ont donc pas le choix. Si la stabilité n'est pas requise, la solution n'est pas unique et différentes implémentations peuvent se comporter différemment.
Yves Daoust
D'accord, mais cette affirmation n'est pas évidente. Qu'est-ce qui rend l'implémentation non stable Existe-t-il une sorte de tri et la stabilité en dépend?
luk32
2

Pour compléter la réponse d' Yves Daoust , le graphique suivant

Triangle

Dans ce graphique, nous avons 3 nœuds et 3 arêtes, chacun a le même poids. De toute évidence, 2 arêtes formeront un MST pour ce graphique. Cependant, les deux bords choisis dépendront non seulement de l'algorithme, mais de la mise en œuvre de l'algorithme. Par exemple, si je stocke les nœuds dans une liste, je peux les visiter dans un ordre différent que si j'ai stocké les nœuds dans un ensemble, même si j'utilise le même algorithme MST à partir de ce moment.

En fait, si mon implémentation repose sur l'arithmétique des pointeurs (ce que font certains conteneurs dans certaines langues), je peux même choisir un MST différent chaque fois que j'exécute l'algorithme!

Cort Ammon
la source
1
Notez que le message d'origine indique que les bords ont un poids unique; cela garantit bien sûr un MST unique.
wchargin
Ce dernier point s'applique également lors de l'utilisation, par exemple, setou dictdans Python 3.3+: les hachages sont salés avec une valeur différente à chaque exécution pour rendre les attaques par déni de service plus difficiles.
Jasmijn
@YvesDaoust Terriblement désolé pour ça!
Cort Ammon
@CortAmmon: pas de soucis, ça arrive.
Yves Daoust