Gli algoritmi di Kruskal e Prim producono lo stesso spanning tree minimo?


9

Supponendo che i bordi non siano indirizzati, abbiano un peso unico e nessun percorso negativo, questi algoritmi producono gli stessi Spanning Tree minimi?


3
Sì, e sembrano produrre lo stesso MST. Ma questo non è definitivo.
Death_by_Ch0colate

2
Ok, è vero, sto solo controllando.
Evil

La risposta rimane positiva anche se rimuoviamo la condizione "nessun percorso negativo"
John L.

Risposte:


13

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.


7

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.


Potrebbero certamente, ma lo fanno?
Raffaello

4
@Raphael: ho risposto.
Yves Daoust,

1
@Yves No, non l'hai fatto. Hai detto forse, " forse " non è una garanzia. Ad esempio, se si dispone di algoritmi di ordinamento, e sono stabili, non producono lo stesso output, a prescindere l'algoritmo utilizzato. Se non sono stabili potrebbero produrre gli stessi risultati. Quindi la domanda è se quegli algoritmi hanno un senso di stabilità nell'argomento e lo mostrano.
luk32,

@ luk32: hai letto "anche due distinte implementazioni dello stesso algoritmo possono"? A proposito, l'algoritmo di ordinamento stabile produce lo stesso output perché è definito in modo univoco, quindi non hanno scelta. Se non è richiesta stabilità, la soluzione non è unica e diverse implementazioni potrebbero comportarsi diversamente.
Yves Daoust,

Abbastanza giusto, ma questa affermazione non è ovvia. Cosa rende l'implementazione possibile non stabile? Esiste una sorta di smistamento e la stabilità dipende da questo?
luk32,

2

Per aggiungere la risposta di Yves Daoust , il seguente grafico

Triangolo

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!


1
Si noti che il post originale afferma che i bordi hanno un peso unico; questo ovviamente garantisce un MST unico.
wchargin,

Quest'ultimo punto vale anche quando si usa eg seto dictin Python 3.3+: gli hash sono salati con un valore diverso per ogni corsa per rendere più difficili gli attacchi denial-of-service.
Jasmijn,

@YvesDaoust Terribilmente dispiaciuto per quello!
Cort Ammon,

@CortAmmon: non preoccuparti, succede.
Yves Daoust,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.