Supponendo che i bordi non siano indirizzati, abbiano un peso unico e nessun percorso negativo, questi algoritmi producono gli stessi Spanning Tree minimi?
Supponendo che i bordi non siano indirizzati, abbiano un peso unico e nessun percorso negativo, questi algoritmi producono gli stessi Spanning Tree minimi?
Risposte:
Trovato questo che afferma che se tutte le condizioni che ho menzionato sopra sono soddisfatte, un grafico ha necessariamente un MST unico. Pertanto, in termini di mia domanda, gli algoritmi di Kruskal e Prim producono necessariamente lo stesso risultato.
Se l'MST è unico, tutti gli algoritmi lo produrranno necessariamente.
Se l'MST non è univoco, gli output potrebbero differire a causa dei diversi ordini di elaborazione dei nodi (anche due diverse implementazioni dello stesso algoritmo possono), ma i pesi totali saranno identici. In questo caso, l' MST è un termine improprio.
Per aggiungere la risposta di Yves Daoust , il seguente grafico
In questo grafico, abbiamo 3 nodi e 3 bordi, ognuno ha lo stesso peso. Ovviamente ogni 2 spigoli formerà un MST per questo grafico. Tuttavia, quali due fronti verranno scelti dipenderà non solo dall'algoritmo, ma dall'implementazione dell'algoritmo. Ad esempio, se memorizzo i nodi in un elenco, potrei visitarli in un ordine diverso rispetto a quando conservassi i nodi in un set, anche se uso lo stesso algoritmo MST da quel momento in poi.
In effetti, se la mia implementazione si basa sull'aritmetica del puntatore (come fanno alcuni contenitori in alcune lingue), potrei anche scegliere un MST diverso ogni volta che eseguo l'algoritmo!
set
o dict
in Python 3.3+: gli hash sono salati con un valore diverso per ogni corsa per rendere più difficili gli attacchi denial-of-service.