Alcuni degli algoritmi di massimo flusso all'avanguardia sono pratici?


30

Per il problema del flusso massimo , sembrano esserci una serie di algoritmi molto sofisticati, con almeno uno sviluppato fino allo scorso anno. Il flusso massimo di Orlin nel tempo O (mn) o meglio fornisce un algoritmo che gira in O (VE).

D'altra parte, gli algoritmi che più comunemente vedo implementati sono (non pretendo di aver fatto una ricerca esaustiva; questo è solo per osservazione casuale):

  • Edmonds-Karp: ,O(VE2)
  • Push-relabel: o utilizzando la selezione vertice FIFO,O(V2E)O(V3)
  • Algoritmo di Dinic: .O(V2E)

Gli algoritmi con un tempo di esecuzione asintotico migliore non sono pratici per le dimensioni del problema nel mondo reale? Inoltre, vedo che "alberi dinamici" sono coinvolti in alcuni algoritmi; sono mai usati in pratica?

Nota: questa domanda è stata originariamente posta sullo overflow dello stack, qui , ma mi è stato detto che qui si adatterebbe meglio.

EDIT : ho fatto una domanda correlata su cs.stackexchange , in particolare sugli algoritmi che usano alberi dinamici (aka alberi tagliati a link), che potrebbero essere di interesse per le persone che seguono questa domanda.


1
parlando in senso generale, se un algoritmo è "pratico" vs se è "implementato" sono un po 'diversi. idealmente gli autori rilasciano implementazioni dei propri algoritmi, nel qual caso sarebbe di solito "pratico" usarli. unf questa è spesso più un'eccezione nella letteratura TCS. ma spesso non è "pratico" "implementare" algoritmi di altri autori solo con descrizioni in articoli scritti in pseudocodice, che a volte sono significativamente o molto complessi ... un'implementazione di successo include buoni test di correttezza, un processo a volte scoraggiante ...
vzn

3
Andrew Goldberg aveva una base di codici molto bella per diverse varianti di flusso massimo in base al suo lavoro di rietichettatura push. Ho usato il codice in passato ed era molto pulito. Sfortunatamente, il sito sembra essere defunto.
Suresh Venkat,

3
@vzn Sono interessato a sapere se gli algoritmi si prestano alla realizzazione pratica. Ci sono algoritmi che non lo fanno, e alcune persone hanno preso a chiamare questi "algoritmi galattici", perché hanno un eccellente comportamento asintotico ma così tanto sovraccarico che al momento non c'è alcun vantaggio pratico per implementarli. (I termini di ordine inferiore contano, dopo tutto.) La moltiplicazione della matrice è l'esempio migliore che mi viene in mente, in cui le soluzioni asintoticamente migliori non vedono mai un uso pratico. Sono curioso di sapere se Max flow è una situazione simile.
Rob Lachlan

5
se un algoritmo è "pratico" vs se è "implementato" sono un po 'diversi. - È corretto. Un algoritmo può essere implementato senza essere pratico, ma non viceversa.
Jeffε

Risposte:


22

Sono uno degli autori dell'articolo sopra riportato.

Vorrei solo menzionare che abbiamo usato `` stato dell'arte '' per indicare algoritmi (con implementazioni disponibili pubblicamente) che funzionano bene su istanze di flusso massimo che si presentano nella visione artificiale.

Vorrei anche aggiungere che in quel contesto ristretto (ma pratico), spesso gli algoritmi che funzionano bene sono quelli con scarse garanzie teoriche. Ad esempio, ref [5] dal nostro documento (algoritmo di Boykov-Kolmogorov) è ampiamente utilizzato nella comunità della visione artificiale, ma non ha un limite di runtime fortemente polifunzionale.

Infine, nel caso qualcuno fosse interessato, i dati dei nostri esperimenti sono disponibili qui: http://ttic.uchicago.edu/~dbatra/research/mfcomp/index.html

Anche il codice sarà presto disponibile.


molto pulito che ti sei unito al gruppo! benvenuto! una domanda sull'articolo [dalla prima ricerca]. sarebbe molto interessante saperne di più sul processo di selezione degli algoritmi utilizzati nel documento, ma non sembra esserne completamente elaborato. forse potresti condividere alcune note di background "dietro le quinte" da qualche parte [ad es. pagina web?] su quali algoritmi sono stati selezionati, quali sono stati omessi, perché, quali sfide ci sono state nell'ottenere / eseguire implementazioni, cosa pensi di più esotico algoritmi come Orlins recente e le loro prospettive di eventuale implementazione, eccetera!
vzn

7

ci sono diversi modi per rispondere a questa domanda ma non necessariamente una risposta di consenso. generalmente gli algoritmi che sono stati implementati e rilasciati per la distribuzione pubblica sono "pratici". tuttavia, alcuni algoritmi che sono stati ideati ma non ancora implementati possono essere pratici, ma "la giuria è fuori" su di loro per così dire. **

una buona strategia per scopi pratici è quella di cercare un sondaggio. anche per coloro che sono interessati agli algoritmi pratici, i benchmark rispetto ai dati del mondo reale possono essere una guida eccellente per il loro comportamento "reale" atteso.

un sondaggio di benchmarking può essere sufficiente ma errerà sul lato degli algoritmi vitali. questa è un'analisi empirica recente e approfondita di 14 algoritmi di flusso massimo "all'avanguardia" confrontati empiricamente rispetto alle istanze di elaborazione della visione, in cui il flusso massimo ha molte applicazioni. "stato dell'arte" viene preso come riferimento agli algoritmi "implementati".

[1] MaxFlow Revisited: un confronto empirico di algoritmi Maxflow per problemi di visione densa di Verma e Batra, 2012

** alcuni algoritmi teorici rientrano in una categoria sempre più frequente nella comunità TCS e vengono informalmente definiti "galattici", ma sfortunatamente gli autori TCS attualmente non etichettano direttamente i loro algoritmi in questa categoria e non vi sono criteri pubblicati o generalmente accettati per algoritmi "galattici", anche se nei blog c'è riferimento .

la praticità in questo senso è forse una nuova dimensione emergente per lo studio teorico. idealmente ci sarebbe un sondaggio sugli algoritmi di flusso massimo specificamente su questo asse / criterio "pratico", ma probabilmente non esiste al momento della scrittura. è un concetto recentemente riconosciuto / riconosciuto in TCS che non è stato ancora completamente formalizzato (a differenza, ad esempio, dell'accettazione diffusa degli algoritmi P come "efficiente").


3
+1. Non sono sicuro del motivo per cui questo è stato sottoposto a downgrade; Sto leggendo il documento a cui ti sei collegato, ed è stato molto utile per vedere quali sono gli approcci pratici, almeno in quel settore problematico.
Rob Lachlan

3
Robert Sedgewick ha affermato in un discorso abbastanza recente che il progettista dell'algoritmo che non esegue esperimenti rischia di perdersi nell'astrazione. Il discorso riguarda la ricerca di percorsi nei grafici ed è in qualche modo correlato anche a maxflow. Non risponde alla domanda, ma potrebbe essere interessante per qualcuno.
Juho

5
@Rob, l'unica parte rilevante in questa risposta è un collegamento al documento e non c'è molto nella risposta che spiega perché quel documento è collegato. Immagino che l'OP abbia trovato il link di Google e non l'abbia letto. Il resto della risposta è costituito da alcune osservazioni e commenti generali che affermano la prospettiva personale di OP su questioni di cui non è un esperto e che non è realmente pertinente qui. Le risposte non sono post sul blog. Un collegamento a un documento pertinente potrebbe essere utile come commento ma non fornisce una risposta. Questa è una brutta risposta se è una. Ecco perché l'ho votato in giù.
Kaveh,

2
@Kaveh abbastanza giusto. Ho trovato il documento come un utile indicatore di ciò che le persone considerano algoritmi praticamente utili. Sono d'accordo che molto è rimasto senza risposta.
Rob Lachlan il

3
Nemmeno io capisco i voti negativi. Non c'è motivo di credere che il poster NON abbia letto l'articolo collegato e sembra pertinente. Vedo il desiderio di non votare, ma non un voto negativo.
Suresh Venkat,

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.