2010-08-18 12 views
11

In termini di tempo di esecuzione, qual è l'algoritmo di chiusura transitoria più noto per i grafici diretti?Algoritmo di chiusura transitoria più noto per il grafico

Attualmente sto usando l'algoritmo di Warshall ma è O (n^3). Sebbene, a causa della rappresentazione grafica, la mia implementazione è leggermente migliore (invece di controllare tutti i bordi, controlla solo i bordi in uscita). Esiste un algoritmo di chiusura transitiva che è migliore di questo? In particolare, c'è qualcosa di specifico per le architetture multi-threaded di memoria condivisa?

Grazie in anticipo.

Raghava.

risposta

11

Il Algorithm Design manual ha alcune informazioni utili. Punti chiave:

  • La chiusura transitiva è difficile quanto la moltiplicazione di matrice; quindi il limite più noto è il Coppersmith–Winograd algorithm che viene eseguito in O (n^2.376), ma in pratica probabilmente non vale la pena utilizzare algoritmi di moltiplicazione di matrice.
  • Per un'accelerazione euristica, calcolare prima i componenti fortemente connessi.
+0

Grazie per la risposta. Immagino che l'accelerazione euristica sarebbe utile solo se ci sono molti componenti fortemente connessi nel grafico. Ho bisogno di osservare i grafici generati da diversi set di dati per vedere se questo è il caso. Ma se questo non è il caso, allora quello di Warshall è il migliore, no? Pensavo ci potesse essere dell'altro. – Raghava

+0

Penso che l'approccio menzionato nel primo punto elenco del primo collegamento sia la strada da seguire. Sarà anche relativamente facile parallelizzare! –

+0

@ Tom: A partire da ora, sto già utilizzando una libreria di grafi multi-thread. Quindi sto usando la loro rappresentazione grafica che non è una matrice. – Raghava

14

Questo articolo discute le prestazioni dei vari algoritmi chiusura transitiva:

http://www.vldb.org/conf/1988/P382.PDF

Un'idea interessante dalla carta è quello di evitare ricalcolare l'intera chiusura al variare grafico.

C'è anche questa pagina Esko Nuutila, che elenca un paio di algoritmi più recenti:

http://www.cs.hut.fi/~enu/tc.html

La sua tesi di dottorato di ricerca elencati in quella pagina può essere il posto migliore per iniziare:

http://www.cs.hut.fi/~enu/thesis.html

Da quella pagina:

Gli esperimenti indicano anche che con la rappresentazione dell'intervallo e i nuovi algoritmi, la chiusura transitiva può essere calcolata in modo lineare nel tempo alla dimensione del grafico di input.

Problemi correlati