Come indicato dal commento di Raffaello e dal commento di j_random_hacker , la risposta è positiva. In effetti, qualsiasi MST è raggiungibile da qualsiasi algoritmo MST con alcune eccezioni minori.
Per un grafico G , due funzioni di peso su tutti i bordi (rispetto ai numeri reali) sono definite come (debolmente) compatibili con il confronto (tra loro) se possiamo estendere il rigoroso ordinamento debole sui bordi indotto da entrambe le funzioni di peso allo stesso rigoroso ordine totale. Cioè, possiamo escogitare regole coerenti di rottura con ciascuna funzione di peso in modo che il risultato del confronto di due bordi qualsiasi con una funzione di peso e le sue regole di rottura sia lo stesso del risultato dell'altra funzione di peso e del suo legame- rompere le regole.
Lemma 1 : Sia e w 2 due funzioni di peso. Le seguenti cinque affermazioni sono equivalenti tra loro.w1w2
- e w 2 sono compatibili con il confronto.w1w2
- In qualsiasi set di bordi, esiste un bordo più leggero comune di e di w 2 .w1w2
- In qualsiasi set di bordi, esiste un bordo più pesante comune di e di w 2 .w1w2
- Esiste una funzione di peso che assegna pesi distinti a bordi distinti in modo tale che w 3 sia comparabile con w 1 e con w 2 .w3w3w1w2
- per ogni bordo ed e 2 tale che e 1 sia più leggero di e 2 per una funzione di peso, e 1 è più leggero o più leggero di e 2 per l'altra funzione di peso.e1e2e1e2e1e2
La prova del lemma 1 è lasciata come un esercizio facile.
Lemma 2 : Sia due funzioni di peso e w 2 tali che se e 1 < w 1 e 2 , quindi e 1 < w 2 e 2 . Quindi sono comparabili.w1w2e1<w1e2e1<w2e2
(Suggerimento) Prova: un approccio consiste nel verificare la condizione 5 del lemma 1. Un altro approccio consiste nel verificare la condizione 2 del lemma 1 mostrando che in qualsiasi insieme di bordi, un bordo più leggero di è anche un bordo più leggero di w 1 ,w2w1
Un algoritmo basato sul confronto su un grafico è definito come compatibile con il confronto se per due funzioni di peso compatibili con il confronto (debolmente) su tutti i bordi, possiamo eseguire l'algoritmo con una funzione di peso in un modo che può essere ripetuto senza alcun cambiamento con l'altra funzione di peso. In particolare, queste due esecuzioni dell'algoritmo avranno lo stesso output.G
Si noti che la maggior parte se non tutti gli algoritmi MST possono essere dichiarati in due versioni. Il primo sapore presuppone che bordi distinti di abbiano pesi distinti, che viene utilizzato quando la preoccupazione principale è trovare un MST (che in realtà è anche il MST unico). Il secondo sapore consente ai bordi distinti di G di avere gli stessi pesi. Naturalmente in questa risposta, dove la preoccupazione principale è trovare tutti gli MST, ci occuperemo solo degli algoritmi MST nel secondo aspetto.GG
Un algoritmo MST compatibile con il confronto può trovare tutti gli MST.
Per provare la proposizione di cui sopra, dobbiamo solo adattare leggermente la sezione "Kruskal può trovare ogni MST" nel calcolo del numero di MST . Per qualsiasi MST di G con funzione di peso w 1 , scegliere un peso positivo più leggero della differenza assoluta tra qualsiasi coppia di pesi disuguali del bordo. Se sottraggiamo quel peso dal peso di ciascun bordo in m senza cambiare i pesi degli altri bordi, otteniamo una nuova funzione peso, diciamo, w 2 . Se il bordo e 1 è più leggero di e 2 di w 1 , e 1 e 2mGw1mw2e1e2w1e1 deve essere più leggero die2 di pure. In base al lemma 2, w 1 e w 2 sono compatibili con il confronto. Nota che m è il MST unico con w 2 . (Un modo per mostrare questa unicità è quello di dimostrare che ogni volta che il peso di un fronte MST è ridotto, qualsiasi MST con la nuova funzione peso deve contenere quel bordo.) Quindi ogni corsa dell'algoritmo su w 2 troverà m . Poiché l'algoritmo è compatibile con il confronto, possiamo eseguire l'algoritmo allo stesso modo con w 1 o con w 2 . Da quella corsa troverai il MST unico, m conw2w1w2mw2w2mw1w2m , troverà m anche con w 1 .w2mw1
Ogni algoritmo MST è compatibile con il confronto
La proposta di cui sopra suona eccessiva. Bene, per ogni algoritmo MST, intendo qualsiasi algoritmo MST basato sul confronto generale che ho visto, escludendo quelli apparentemente patologici come quelli sbagliati o che hanno passaggi non necessari. Poiché un algoritmo MST compatibile con il confronto può trovare tutti gli MST, ogni algoritmo MST può trovare tutti gli MST. In particolare, ciascuno dei quattro algoritmi MST classici , vale a dire gli algoritmi di Borůvka, Prim, Kruskal e di cancellazione inversa, può trovare tutti gli MST.
Ecco altri tre algoritmi MST compatibili con il confronto.
- l'algoritmo delete-heavy-edge. Inizia con tutti i bordi. Trova ripetutamente un ciclo e rimuovi uno dei suoi bordi più pesanti fino a quando non rimane alcun ciclo.
- l'algoritmo add-non-heavy-edge. Inizia con il set vuoto. Scorrere tutti i bordi. Ogni bordo viene aggiunto e, se si forma un ciclo, rimuovere uno dei bordi più pesanti.
- l'algoritmo di sostituzione per bordo più leggero. Inizia con qualsiasi spanning tree . Trovare il ciclo T , più un vantaggio e non in T . Se un bordo t in quel ciclo è più pesante e , rimuovere t da T e aggiungere e di T . Ripetere fino a quando non siamo in grado di ridurre il peso di T più.TTeTtetTeTT
Il seguente algoritmo MST non è compatibile con il confronto.
- l'algoritmo di Kruskal tendente al grado, che è l'algoritmo di Kruskal con la seguente modifica. Supponiamo che quando rimuoveremo un bordo con il peso minimo da come nella descrizione di Wikipedia dell'algoritmo di Kruskal , abbiamo più bordi con il peso minimo da scegliere. Il bordo che scegliamo di rimuovere sarà un bordo la cui somma dei gradi dei suoi due vertici è la più grande tra tutte le scelte. Questo algoritmo non può essere compatibile con il confronto poiché non trova l'MST { a b , b c , c d } del grafico con i vertici a , b , c e il bordo a bS{ab,bc,cd}a,b,cabdi peso e bordi b c , c d , d b di peso 2 . Questo algoritmo è considerato patologico a causa di quella modifica non necessaria.1bc,cd,db2
Tutti gli otto algoritmi MST sopra menzionati sono basati sul confronto.
Come mostrare un algoritmo compatibile con il confronto?
Userò l'algoritmo di Kruskal come esempio. Ecco la descrizione dell'algoritmo di Kruskal (nel secondo sapore) su un grafo connesso ponderata non orientato .G
- crea un grafico con gli stessi vertici di G ma senza bordi. Quindi F è una foresta di alberi separati di un singolo vertice.FGF
- S
- SF
- F
w1w2GSw1w2
Un algoritmo è compatibile con il confronto se, in termini generici, può essere descritto in tre tipi di passaggi.
- fare qualcosa che non comporta peso.
- selezionare un bordo con il peso minimo in un determinato set di bordi
- selezionare un bordo con il peso massimo in un determinato set di bordi
Questa condizione sufficiente copre l'algoritmo di Borůvka, Prim, Kruskal, reverse-delete, delete-heavy-edge e add-non-heavy-edge. Si noti che per soddisfare questa condizione sufficiente, potrebbe essere necessario modificare alcune descrizioni di un algoritmo senza influire sull'insieme di MST raggiungibili. A causa dell'eccezione dell'algoritmo di Kruskal basato sul grado di compatibilità con il confronto, lasciatemi sottolineare che questa condizione sufficiente è descritta in termini sciolti