Calcola un flusso massimo da un taglio minimo


16

Sappiamo che il calcolo di un flusso massimo risp. un taglio minimo di una rete con capacità è equivalente; cf. il teorema di taglio minimo flusso massimo .

Disponiamo di algoritmi (più o meno efficienti) per calcolare i flussi massimi e calcolare un taglio minimo dato un flusso massimo non è né difficile né costoso.

Ma che dire del contrario? Dato un taglio minimo, come possiamo determinare un flusso massimo? Senza risolvere Max-Flow da zero, ovviamente, e preferibilmente anche più veloce di così.

Alcuni pensieri:

  • Dal taglio minimo, conosciamo il valore di flusso massimo. Non vedo come queste informazioni aiutino gli approcci standard ad aumentare-percorso e push-relabel, sebbene l'adattamento di quest'ultimo sembri leggermente più plausibile.

  • Non possiamo usare il taglio minimo per dividere la rete in due parti e ricorrere poiché ciò non ridurrà il problema nel caso peggiore (se una partizione è un singleton); inoltre non avremmo un taglio minimo delle istanze più piccole.

  • Conoscere il valore del flusso massimo accelera risolvendo il Max-Flow LP, forse attraverso le condizioni di allentamento complementari?


Domanda correlata: conosciamo algoritmi per il calcolo di min-cut (che non utilizzano algoritmi a flusso massimo)?
Raffaello

3
Lo facciamo sicuramente, l'algoritmo randomizzato di Karger è molto popolare e per questo è necessaria una conoscenza zero dei flussi massimi.
Juho,

2
Se non vuoi algoritmi randomizzati, l'algoritmo Stoer-Wagner è molto semplice, anche senza tecniche di flusso.
Juho,

2
Roba buona! C'è un'altra sfida qui. Conoscere solo il taglio minimo trasmette bit di informazioni (al massimo), dal momento che ogni taglio è isomorfo a un sottoinsieme di V . Tuttavia, un flusso massimo può richiedere molto di più di | V | bit di informazioni da rappresentare (specialmente se le capacità sono grandi). Quindi, teoricamente, non puoi sperare in un algoritmo che guardi solo al taglio e sputi il ​​flusso; dovrebbe anche guardare anche il grafico e fare qualche calcolo aggiuntivo. (Mi rendo conto che non è molto di una barriera.)|V|V|V|
DW

Risposte:


6

Nel peggiore dei casi, il taglio minimo stesso non fornisce molte informazioni sul flusso massimo. Considera un grafico in cui il minimo s , t -cut ha valore w . Se estendo G aggiungendo un nuovo vertice s e un bordo ( s , s ) con peso w , un taglio minimo s , t nel nuovo grafico è costituito solo dal bordo ( s , s )G=(V,E)s,twGs(s,s)ws,t(s,s)ma ciò non fornisce alcuna informazione su come ottenere unità di flusso da s a t .wst

In effetti, il taglio minimo indica il valore del flusso, ma non come raggiungerlo. Ciò significa che conoscere il taglio minimo può accelerare la ricerca del flusso al massimo da un fattore logaritmico, poiché potremmo fare una ricerca binaria per trovare il valore del taglio.


Ma quel fattore logaritmico sarebbe sulla dimensione dell'intervallo dei potenziali valori di flusso, quindi incomparabile ai limiti superiori esistenti nella risoluzione del flusso massimo che dipende solo dalla dimensione del grafico. Detto questo, anche una velocità logaritmica sarebbe interessante. Non sono convinto che conoscere il valore di un flusso massimo non aiuti affatto.
Raffaello

-2

Esistono sicuramente algoritmi che ti consentono di calcolare il taglio minimo prima di calcolare il flusso massimo. Due di questi algoritmi sono il relabel push e gli algoritmi pseudoflow strettamente correlati. Quest'ultimo è più efficiente. Entrambi questi algoritmi utilizzano proprietà speciali del grafico residuo che migliorano iterativamente per derivare il flusso massimo dal taglio minimo. Per i dettagli, consiglio vivamente di leggere il codice e i documenti.

Per elaborare il caso del relabel push, quando l'algoritmo non può spingere più flusso nel lavandino è garantito che abbia calcolato un taglio minimo. Questa parte dell'algoritmo è chiamata fase 1 per mancanza di un nome migliore. La fase 2 è lo stadio più efficiente in cui trasforma il taglio minimo in un flusso massimo annullando in modo iterativo i cicli nel grafico residuo usando una prima ricerca a singola profondità e spingendo l'eccesso indietro alla sorgente. Credo che la fase 2 possa essere dimostrata asintomaticamente più efficiente della fase 1.


4
Si prega di rileggere la domanda; non è quello a cui hai risposto.
Raffaello

L'esempio di PR che ho dato presuppone che tu abbia calcolato altre informazioni lungo il percorso mentre stavi calcolando min-cut. La tua domanda originale non specificava se ti fosse permesso di conservare altre informazioni insieme al taglio minimo per facilitare il successivo calcolo del flusso massimo. È corretto dichiarare la domanda originale come "Dato un taglio minimo e nessuna altra informazione , come possiamo determinare un flusso massimo?".
Cane,

2
Ho dichiarato: "dato A, calcola B". L'unico presupposto ragionevole è che ti viene dato solo A, altrimenti parlare di problemi computazionali sarebbe una faccenda molto confusa.
Raffaello

Mi permetto di dissentire. Da una prospettiva pratica, non calcoleresti mai un taglio minimo senza calcolare ulteriori informazioni (come quella dell'algoritmo PR). Da una prospettiva teorica potrebbe essere bello considerare le cose isolatamente come dici. Il contesto è la chiave qui.
Cane,
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.