Algoritmi veloci di larghezza degli alberi


18

Vorrei calcolare la larghezza dell'albero di un grafico. Esistono euristiche davvero buone per altri problemi con i grafici NP-hard come VF2 per l'isomorfismo dei sottografi, ad esempio con il codice disponibile in igraph . Li ho provati sui miei grafici e trovo che corrano molto velocemente per i miei dati.

Esistono algoritmi veloci per il calcolo della larghezza degli alberi in una vena simile?


1
fyi recentemente treewidth è stato collegato alla durezza SAT da Gaspers / Szeider in FOCS, spero di sentire altri in quella chat / discussione
vzn

Risposte:


19

Per quanto ne so, lo stato dell'arte è quello che viene riportato

Hans L. Bodlaender, Fedor V. Fomin, Arie MCA Koster, Dieter Kratsch e Dimitrios M. Thilikos (2012), "Su algoritmi esatti per la larghezza degli alberi", ACM Transactions on Algorithms 9 (1): A12, doi: 10.1145 / 2390176.2390188 .

I metodi qui descritti includono un algoritmo implementato con alcune ottimizzazioni euristiche per renderlo più veloce in pratica.O*(2n)


2
Grazie. I riferimenti 2, 8 e 15 che forniscono l'euristica del limite superiore e inferiore potrebbero in pratica essere i più utili di quel documento.
Felix,

10

Ho scritto un articolo intitolato A Fast Parallel Branch e Bound Algorithm for Treewidth, in ICTAI 2011. Può calcolare la larghezza degli alberi in multi-core . Ho usato molte euristiche e ho trascorso molto tempo a perfezionare il programma.

Ero uno studente universitario a caso in Cina e non sono arrivato a una buona conferenza. Ma in base ai risultati del mio esperimento, penso che il mio programma sia molto veloce. Ho risolto molti benchmark irrisolti nella lib Treewidth e il mio programma era 40 volte più veloce di un algoritmo proposto da Zhou e Hansen in IJCAI 09 ..

Non sto più lavorando su questo argomento. Ma se il mio lavoro precedente è utile, puoi scaricare il mio programma (src ed exe) da http://www.callowbird.com/undergraduate-stuff.html e provare. (ancora, è molto molto lento su un'istanza leggermente più grande)


5

O*(2K)


1
2O(K)O(cKn)c

5

Ecco due sondaggi sugli algoritmi per il calcolo della larghezza degli alberi che possono essere utili. Il primo ha confronti empirici e ha algoritmi vari implementati come libreria Java.

Esistono molti algoritmi per calcolare un limite superiore, un limite inferiore o l'esatta larghezza dell'albero di un grafico. Abbiamo implementato molte euristiche upperbound e lowerbound e due algoritmi esatti (una programmazione dinamica e un algoritmo Branch and Bound). Questo rapporto confronta i diversi tipi di algoritmi e mostra che alcuni algoritmi sono preferiti.

La larghezza dell'albero è un parametro grafico con diverse interessanti applicazioni teoriche e pratiche. Questo sondaggio esamina i risultati algoritmici sulla determinazione della larghezza degli alberi di un dato grafico e sulla ricerca di una decomposizione degli alberi di piccola larghezza. Vengono discussi entrambi i risultati teorici, che stabiliscono la complessità computazionale asintotica del problema, come lavoro sperimentale sull'euristica (sia per i limiti superiori che per i limiti inferiori), preelaborazione, algoritmi esatti e postelaborazione.


3

Sage non sa esattamente come calcolare la larghezza dell'albero ma può darti la larghezza del percorso di piccoli grafici.

http://www.sagemath.org/doc/reference/graphs/sage/graphs/graph_decompositions/vertex_separation.html

Sarei molto felice di sapere che c'è qualcosa implementato e pubblico per calcolare le decomposizioni degli alberi, sebbene :-)

Nathann


1
Ehi, c'è un'app Android che ha un tester per la larghezza degli alberi . Il codice può essere riscritto per avere una decomposizione, ma al momento verifica solo se la larghezza dell'albero viene data al massimoK. (avviso: sono uno degli sviluppatori)
Pål GD
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.