2012-03-29 11 views
7

Sto lavorando a un progetto che prevede l'esecuzione di algoritmi su grafici di grandi dimensioni. I due più grandi hanno circa 300k e 600k di vertici (penso che siano piuttosto scarni). Spero di trovare una libreria java in grado di gestire grafici di grandi dimensioni e anche alberi di dimensioni leggermente inferiori, poiché uno degli algoritmi che utilizzerò prevede la scomposizione di un grafico in un albero. Idealmente, la libreria includerebbe anche la prima ricerca di ampiezza e gli algoritmi di Dijkstra o altri percorsi più brevi.Libreria Java per la memorizzazione e l'elaborazione di grafici di grandi dimensioni (fino a 600k vertici)

Sulla base di another question, ho cercato in alcune librerie (JGraphT, JUNG, jdsl, yworks) ma sto avendo difficoltà a trovare quanti vertici possono realisticamente gestire. Guardando la loro documentazione, tutto quello che ho trovato è stato un po 'nello JUNG FAQ che diceva che poteva facilmente gestire grafici di oltre 150k vertici, che è ancora un po' più piccolo dei miei grafici ... Spero che qualcuno qui ne abbia usato uno o più di queste librerie e può dirmi se gestirà le dimensioni del grafico che mi servono, o se c'è qualche altra libreria che sarebbe meglio.

Per la cronaca non ho bisogno di strumenti di visualizzazione; si tratta rigorosamente di rappresentare i grafici e gli alberi in strutture dati e algoritmi in esecuzione su di essi.

Contesto se qualcuno si preoccupa veramente: per una lezione dovrei implementare un algoritmo descritto in un documento di ricerca, e far correre gli esperimenti sulla carta nel miglior modo possibile. La carta e i set di dati che utilizzerò possono essere trovati here. Il mio professore dice che posso usare qualsiasi libreria che riesca a trovare finché posso dire quale sia la complessità tempo/spazio degli algoritmi/strutture dati.

+1

Ho trovato alcune informazioni su [JGraphT] (http://jgrapht-users.107614.n3.nabble.com/Max-limit-of-vertices-td1194057.html). Apparentemente dovrebbe gestire questi grafici senza problemi ... – Maltiriel

risposta

3

Si dovrebbe dare un'occhiata a Neo4J che è un database grafico che potrebbe essere una buona soluzione per i vostri problemi.

+0

Grazie, sto esaminando questo ora. Può sicuramente gestire questi set di dati. – Maltiriel

+1

Prima di tutto provo una delle librerie in memoria, perché è quello che è fatto sul foglio, quindi penso che il mio prof vorrebbe che sia meglio, ma se non funziona andrò con Neo4J. Sembra facile da usare e ha tutti gli algoritmi di cui ho bisogno. Grazie per il suggerimento! – Maltiriel

3

Checkout JGraph pure. Tuttavia è orientato alla visualizzazione.

Inoltre, forse Apache Hama - un framework di calcolo distribuito per massicci calcoli scientifici, ad esempio algoritmi a matrice, grafico e di rete.

Annas può anche interessare - framework open-source Java che è stato costruito per gli sviluppatori e ricercatori nel campo della teoria dei grafi - AI, Percorso trovare, sistemi distribuiti, ecc

+0

Hmm. Le informazioni che ho visto fanno sembrare che questo non sia adatto ... Nel manuale utente iniziano ad andare sullo swing, ad esempio. Non voglio affatto scherzare con le cose della visualizzazione. È possibile, lo sai? – Maltiriel

+0

@Maltiriel, potresti potenzialmente lavorare su modelli di grafici standalone. Tuttavia, se non è necessario visualizzare il grafico, è eccessivo. – tenorsax

+0

Grazie per i suggerimenti aggiuntivi. Hama potrebbe essere un po 'troppo per quello che sto facendo, ma Annas sembra molto interessante. Non ne ho mai incontrato uno nelle mie ricerche prima di questo. – Maltiriel

1

Cassovary https://github.com/twitter/cassovary -project da Twitter può gestire grafici molto grandi con Scala (quindi JVM) in memoria.

alternativa, versione Java di GraphChi può gestire grafici ancora più grandi, utilizzando disk: http://code.google.com/p/graphchi-java/

Tuttavia, GraphChi non sarà efficace per algoritmi di tipo esatto cammini minimi, in quanto richiedono rapido accesso casuale.