Trovare il taglio minimo di un grafico non indirizzato


25

Ecco una domanda di un esame passato che sto cercando di risolvere:

Per un grafico non orientato con pesi positivi , sto cercando di trovare il taglio minimo. Non conosco altri modi per farlo oltre a usare il teorema di taglio minimo flusso massimo. Ma il grafico non è indirizzato, quindi come devo dirigerlo? Ho pensato di dirigere i bordi su entrambe le estremità, ma allora quale vertice sarebbe la fonte e quale vertice sarebbe il lavandino? O c'è un altro modo per trovare il taglio minimo?w ( e ) 0Gw(e)0


1
Se non hai sorgente e target nel grafico originale, suppongo che dovrai provare più scelte. (Per ogni data e , il taglio minimo non può separare i due.)tst
Raphael

Stai cercando di trovare il taglio minimo per determinati nodi sorgente e sink o il taglio minimo del grafico?
Peter,

@Peter: il taglio minimo del grafico.
Jozef,

Risposte:


13

Esistono molti algoritmi per trovare il taglio minimo di un grafico non orientato. L'algoritmo di Karger è un algoritmo randomizzato semplice ma efficace.

In breve, l'algoritmo funziona selezionando i bordi uniformemente a caso e contraendoli con i loop automatici rimossi. Il processo si interrompe quando rimangono due nodi e i due nodi rappresentano un taglio. Per aumentare la probabilità di successo, l'algoritmo randomizzato viene eseguito più volte. Mentre si esegue la corsa, si tiene traccia del taglio più piccolo trovato finora.

Vedi la voce di Wikipedia per maggiori dettagli. Per un'introduzione forse migliore, dai un'occhiata al primo capitolo di Probabilità e calcolo: algoritmi randomizzati e analisi probabilistica di Michael Mitzenmacher ed Eli Upfal.


È un algoritmo di approssimazione?
Strin

@Strin È un algoritmo randomizzato che trova il taglio minimo con alta probabilità.
Juho,

1
Non penso che Karger sia adatto a trovare un taglio di peso minimo. La derivazione della probabilità che trovi un taglio minimo dipende dal fatto che trova un taglio di cardinalità minima; È molto improbabile che Karger trovi un taglio minimo con molti bordi leggeri.
Sumudu Fernando,

8

(u,v,weight)(u,v,weight)(v,u,weight)

... ma allora quale vertice sarebbe la fonte e quale vertice sarebbe il lavandino?

Non importa


1
Perché non importa?
The Coding Wombat,

1

L' algoritmo Ford-Fulkerson dovrebbe funzionare per te. Puoi creare due vertici falsi, vale a dire. la fonte e il sink.

Dai anche un'occhiata all'algoritmo Edmonds-Karp . Ne esistono due varianti:

  1. Una versione sceglie il percorso più breve
  2. Altro sceglie un percorso con la capacità massima

, al contrario di Ford-Fulkerson che sceglie un percorso arbitrario.

Questa è una buona risorsa


Benvenuto in cs.stackexchange! Potrebbe aiutare l'OP se si potesse spiegare ulteriormente come i falsi vertici sono collegati al grafico esistente. E quali saranno i pesi dei bordi dei nuovi bordi.
Paresh,
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.