Gli alberi tagliati a link vengono mai utilizzati in pratica, per il calcolo del flusso massimo o altre applicazioni?


20

Molti algoritmi di flusso massimo che comunemente vedo implementati, l'algoritmo di Dinic, il push relabel e altri, possono migliorare il loro costo del tempo asintotico attraverso l'uso di alberi dinamici (noti anche come alberi tagliati a link).

  • Push relabel funziona in o O ( V 3 ) o O ( V 2 O(V2E)O(V3)normalmente, ma con alberi dinamiciO(VElog(V2/E))O(V2E)O(VElog(V2/E))
  • L'algoritmo di Dinic funziona in , ma con alberi dinamici O ( V E log ( V ) )O(V2E)O(VElog(V))

Tuttavia, le implementazioni pratiche degli algoritmi di flusso massimo nella maggior parte delle librerie non sembrano fare uso di questa struttura di dati. Gli alberi dinamici vengono mai utilizzati nella pratica per il calcolo del flusso massimo? O portano troppo sovraccarico per essere utile per le dimensioni del problema nel mondo reale?

Esistono altri domini problematici in cui vengono utilizzati alberi tagliati link?

Questa domanda è correlata a una domanda che ho posto su cstheory: alcuni degli algoritmi di massimo flusso all'avanguardia sono pratici?


panoramica / descrizione degli alberi tagliati link ma indica solo "è utile per applicazioni come Network Flow"
vzn

dal rilevamento tarjan citato da reza, sostanzialmente gli algoritmi del tempo lineare funzionano molto bene / meglio per un numero moderato di vertici / spigoli, e poi c'è una treppiede di vertici / spigoli più grandi in cui gli algoritmi logaritmici superano l'algoritmo lineare. quindi gli accessi logaritmici sono utili e possono essere significativamente migliori per grafici molto grandi.
vzn

Risposte:


7

C'è un documento intitolato " Alberi dinamici in pratica " che esamina l'implementazione pratica.

Le altre categorie che l'albero di Link-Cut può essere utilizzato in modo efficiente sono nell'indicizzazione del database . Puoi trovarlo nel libro " Tecniche di indice del database ".


penso che questo abbia bisogno di qualche elaborazione. gli alberi sono utili per gli indici in generale, ma a quali condizioni l'albero dovrebbe essere modificato?
vzn

@vzn: B + -tree, R-tree, H-Tree e X-Tree sono alcuni esempi.
Reza,

certo, ma sospetto che nessuno abbia mai provato ad usare alberi tagliati nei link negli indici DB finora. è un'app plausibile ma non sembra chiaro che siano ottimizzati per le stesse operazioni che si verificano negli indici DB.
vzn

5

questo documento scopre alla fine che un albero di collegamento (LC) supera gli alberi rake-compress (RC) per l'algoritmo di flusso massimo di Sleator / Tarjan usando un generatore di grafici casuali Dimacs standard.

l'articolo si concentra sulla propagazione del cambiamento come applicazione di alberi dinamici. ad esempio, la propagazione delle modifiche è simile al modo in cui le celle del foglio di calcolo Excel devono essere ricalcolate sulle modifiche ad alcune celle in base alle dipendenze cella / formula. gli autori hanno rilasciato il loro codice come libreria aperta.

Un'analisi sperimentale della propagazione del cambiamento negli alberi dinamici Acar, Blelloch, Vittes

La propagazione delle modifiche è una tecnica per regolare automaticamente l'output di un algoritmo alle modifiche nell'input. L'idea alla base della propagazione delle modifiche è quella di tenere traccia delle dipendenze tra i dati e le chiamate di funzione, in modo che, quando cambia l'input, le funzioni interessate da tale modifica possano essere rieseguite per aggiornare il calcolo e l'output. La propagazione delle modifiche consente a un compilatore di dinamizzare gli algoritmi statici.


Grazie. È bello vedere alcuni parametri di riferimento di algoritmi che coinvolgono alberi dinamici.
Rob Lachlan,
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.