Domanda

Qualcuno ha avuto buone esperienze con le librerie Java per gli algoritmi grafici.ho provato JGraph e l'ho trovato ok, e ce ne sono molti diversi su Google.Ce n'è qualcuno che le persone utilizzano effettivamente con successo nel codice di produzione o che consiglierebbero?

Per chiarire, non sto cercando una libreria che produca grafici/grafici, ne sto cercando una che aiuti con gli algoritmi dei grafici, ad esempio l'albero di copertura minimo, l'algoritmo di Kruskal Nodi, bordi, ecc.Idealmente uno con alcuni buoni algoritmi/strutture dati in una bella API Java OO.

È stato utile?

Soluzione

Se stavi usando JGraph, dovresti provarlo JGraphT che è progettato per gli algoritmi.Una delle sue caratteristiche è la visualizzazione utilizzando la libreria JGraph.È ancora sviluppato, ma abbastanza stabile.Ho analizzato la complessità degli algoritmi JGraphT qualche tempo fa.Alcuni di essi non sono i più veloci, ma se hai intenzione di implementarli da solo e hai bisogno di visualizzare il tuo grafico, allora potrebbe essere la scelta migliore.Mi è piaciuto molto utilizzare la sua API, quando dovevo scrivere rapidamente un'app che funzionasse sul grafico e la visualizzasse in seguito.

Altri suggerimenti

Riepilogo:

Guardare JGraphT per una libreria di grafici Java molto semplice e potente che è abbastanza ben fatta e, per fugare ogni confusione, è diverso da JGraph.Alcuni Codice d'esempio:

UndirectedGraph<String, DefaultEdge> g =
        new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    String v1 = "v1";
    String v2 = "v2";
    String v3 = "v3";
    String v4 = "v4";

    // add the vertices
    g.addVertex(v1);
    g.addVertex(v2);
    g.addVertex(v3);
    g.addVertex(v4);

    // add edges to create a circuit
    g.addEdge(v1, v2);
    g.addEdge(v2, v3);
    g.addEdge(v3, v4);
    g.addEdge(v4, v1);

JUNG è una buona opzione per la visualizzazione e ha anche un insieme abbastanza buono di algoritmi grafici disponibili, inclusi diversi meccanismi per la creazione di grafici casuali, il ricablaggio, ecc.Ho anche trovato che in generale sia abbastanza facile estenderlo e adattarlo dove necessario.

Offerte di Apache Commons grafico dei beni comuni.Sotto http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ si può ispezionare la fonte.L'utilizzo dell'API di esempio è nell'SVN, pure.Vedere https://issues.apache.org/jira/browse/SANDBOX-458 per un elenco degli algoritmi implementati, anche confrontati con Jung, GraphT, Prefuse, jBPT

Google Guava se hai bisogno solo di buone strutture dati.

JGraphT è una libreria di grafici con molti algoritmi implementati e con (a mio parere) un buon modello grafico. Esempio di Helloworld.Licenza:LGPL+EPL.

JUNG2 è anche una libreria con licenza BSD con la struttura dati simile a JGraphT.Offre algoritmi di layout, che attualmente mancano in JGraphT.Il commit più recente è del 2010 e packages hep.aida.* sono LGPL (tramite il biblioteca colt, Quale viene importato da JUNG).Ciò impedisce che JUNG venga utilizzato in progetti sotto l'egida di ASF e FSE.Forse si dovrebbe usare il forcella github e rimuovere quella dipendenza. Commetti f4ca0cd sta rispecchiando l'ultimo commit CVS.I commit attuali sembrano rimuovere la funzionalità di visualizzazione. Impegna d0fb491c aggiunge a .gitignore.

Prefuso memorizza i grafici utilizzando una struttura a matrice, che non è efficiente in termini di memoria per i grafici sparsi.Licenza:BSD

La gioia dell'eclissi ha algoritmi di layout grafico integrati, che possono essere utilizzati indipendentemente da SWT.Vedere org.eclipse.zest.layouts.algorithms.La struttura del grafico utilizzata è quella di Eclissi Draw2d, Dove I nodi sono oggetti espliciti e non iniettati tramite Generics (come accade in Apache Commons Graph, JGraphT e JUNG2).

http://neo4j.org/ è un database a grafo che contiene molti algoritmi a grafo e scala meglio della maggior parte delle librerie in memoria.

In un progetto universitario ho giocato con yFiles di yFunziona e ho scoperto che aveva un'API piuttosto buona.

guardare Progetti:

Blueprints è una raccolta di interfacce, implementazioni, integrazioni e suite di test per il modello di dati del grafico delle proprietà.Blueprints è analogo a JDBC, ma per i database a grafo.All'interno dello stack software open source TinkerPop, Blueprints funge da tecnologia fondamentale per:

Tubi:Un framework di flusso di dati pigro

Gremlino:Un linguaggio di attraversamento dei grafi

Cornici:Un mappatore oggetto-grafo

Forno:Un pacchetto di algoritmi grafici

Rexster:Un server grafico

http://incubator.apache.org/hama/ è un pacchetto scientifico distribuito su Hadoop per matrici e dati grafici di grandi dimensioni.

JDSL (Data Structures Library in Java) dovrebbe essere abbastanza buono se ti piacciono gli algoritmi grafici - http://www.cs.brown.edu/cgc/jdsl/

Per quanto riguarda la visualizzazione, il nostro gruppo ha avuto un certo successo prefuso.L'abbiamo esteso per gestire le basi architettoniche e i diagrammi a bolle, e non si è lamentato troppo.Hanno anche un nuovo toolkit Flex chiamato Flare che utilizza un'API molto simile.

AGGIORNAMENTO:Dovrei essere d'accordo con il commento, alla fine abbiamo scritto molte funzionalità personalizzate/aggirando le limitazioni dei prefusibili.Non posso dire che iniziare da zero sarebbe stato meglio, dato che siamo stati in grado di dimostrare i progressi dal primo giorno utilizzando prefuse.D'altra parte, se stessimo realizzando una seconda implementazione delle stesse cose, potrei saltare prefuse poiché comprenderemmo molto meglio i requisiti.

Prova Anna: è un pacchetto grafico open source con cui è facile fare i conti

http://annas.googlecode.com

È anche bene essere convinti che un grafico possa essere rappresentato semplicemente come:

class Node {
   int value;
   List<Node> adj;
}

e implementa da solo la maggior parte degli algoritmi che ritieni interessanti.Se ti imbatti in questa domanda nel bel mezzo di una sessione di pratica/apprendimento sui grafici, questa è la migliore libreria da considerare.;)

Puoi anche preferire la matrice di adiacenza per gli algoritmi più comuni:

class SparseGraph {
  int[] nodeValues;
  List<Integer>[] edges;     
}

o una matrice per alcune operazioni:

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}

Non so se lo definirei pronto per la produzione, ma c'è jGABL.

Se hai bisogno di prestazioni, potresti dare un'occhiata a Grph.La biblioteca è sviluppata presso l'Università francese e il CNRS/Inria.

http://www.i3s.unice.fr/~hogie/grph/

Il progetto è attivo e viene fornito supporto reattivo!

Le implementazioni didattiche dell'algoritmo del grafico in Java possono essere trovate qui (del prof.Sedgewick et al.):http://algs4.cs.princeton.edu/code/

Li ho conosciuti mentre frequentavo questi eccezionali corsi di algoritmo su Coursera (insegnati anche dal prof.Sedgewick):

https://www.coursera.org/course/algs4partI

https://www.coursera.org/course/algs4partII

Se stai effettivamente cercando librerie di grafici e non librerie di grafici Node/Edge, suggerirei di spendere una fortuna nella libreria Big Faceless Graph (GGG).È molto più semplice da usare rispetto a JFreeChart, sembra più bello, funziona più velocemente, ha più opzioni di output, davvero nessun paragone.

JGraph da http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html

Fornisce un potente software per lavorare con i grafici (diretti o indiretti).Genera anche il codice Graphivz, puoi vedere le rappresentazioni grafiche.Puoi inserire i tuoi algoritmi di codice nel pacchetto, ad esempio:codice di backtracking.Il pacchetto fornisce alcuni algoritmi:Dijkstra, backtracking del costo minimo del percorso, ecc..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top