Frage

Hat jemand gute Erfahrungen mit Java-Bibliotheken für Graph-Algorithmen gemacht?ich habe es versucht JGraph und fand es in Ordnung, und es gibt viele verschiedene bei Google.Gibt es welche, die die Leute tatsächlich erfolgreich im Produktionscode verwenden oder empfehlen würden?

Zur Klarstellung: Ich suche keine Bibliothek, die Grafiken/Diagramme erstellt, sondern eine, die bei Graph-Algorithmen hilft, z. B. Minimum Spanning Tree, Kruskals Algorithmus Nodes, Edges usw.Idealerweise eines mit einigen guten Algorithmen/Datenstrukturen in einer schönen Java OO API.

War es hilfreich?

Lösung

Wenn Sie JGraph verwenden, sollten Sie es versuchen JGraphT das für Algorithmen konzipiert ist.Eine seiner Funktionen ist die Visualisierung mithilfe der JGraph-Bibliothek.Es ist noch entwickelt, aber ziemlich stabil.Ich habe vor einiger Zeit die Komplexität von JGraphT-Algorithmen analysiert.Einige davon sind nicht die schnellsten, aber wenn Sie sie selbst implementieren und Ihr Diagramm anzeigen müssen, ist dies möglicherweise die beste Wahl.Die Verwendung der API hat mir sehr gut gefallen, als ich schnell eine App schreiben musste, die mit Diagrammen arbeitet und diese später anzeigt.

Andere Tipps

Zusammenfassung:

Kasse JGraphT für eine sehr einfache und leistungsstarke Java-Graph-Bibliothek, die ziemlich gut gemacht ist, und um jegliche Verwirrung zu zerstreuen, ist anders als JGraph.Manche Beispielcode:

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 ist eine gute Option zur Visualisierung und verfügt außerdem über einen recht guten Satz verfügbarer Diagrammalgorithmen, einschließlich verschiedener Mechanismen für die zufällige Diagrammerstellung, Neuverdrahtung usw.Ich habe auch festgestellt, dass es im Allgemeinen recht einfach zu erweitern und bei Bedarf anzupassen ist.

Apache Commons-Angebote Commons-Graph.Unter http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ man kann die Quelle untersuchen.Beispiel-API-Nutzung ist im SVN, zu.Sehen https://issues.apache.org/jira/browse/SANDBOX-458 für eine Liste implementierter Algorithmen, auch verglichen mit Jung, GraphT, Prefuse, jBPT

Google Guave wenn Sie nur gute Datenstrukturen benötigen.

JGraphT ist eine Graphenbibliothek mit vielen implementierten Algorithmen und einem (meiner Meinung nach) guten Graphenmodell. Helloworld-Beispiel.Lizenz:LGPL+EPL.

JUNG2 ist ebenfalls eine BSD-lizenzierte Bibliothek mit einer ähnlichen Datenstruktur wie JGraphT.Es bietet Layout-Algorithmen, die derzeit in JGraphT fehlen.Der neueste Commit stammt aus dem Jahr 2010 und enthält Pakete hep.aida.* sind LGPL (über die Colt-Bibliothek, welche wird von JUNG importiert).Dies verhindert den Einsatz von JUNG in Projekten unter dem Dach von ASF und ESF.Vielleicht sollte man das nutzen Github-Gabel und entfernen Sie diese Abhängigkeit. Commit f4ca0cd spiegelt den letzten CVS-Commit wider.Die aktuellen Commits scheinen die Visualisierungsfunktionalität zu entfernen. Commit d0fb491c fügt a hinzu .gitignore.

Vorschmelzen speichert die Diagramme mithilfe einer Matrixstruktur, die für Diagramme mit geringer Dichte nicht speichereffizient ist.Lizenz:BSD

Eclipse Zest verfügt über integrierte Diagrammlayout-Algorithmen, die unabhängig von SWT verwendet werden können.Sehen org.eclipse.zest.layouts.algorithms.Die verwendete Diagrammstruktur ist die von Eclipse Draw2d, Wo Knoten sind explizite Objekte und nicht über Generics injiziert (wie es in Apache Commons Graph, JGraphT und JUNG2 der Fall ist).

http://neo4j.org/ ist eine Diagrammdatenbank, die viele Diagrammalgorithmen enthält und besser skaliert als die meisten In-Memory-Bibliotheken.

In einem Universitätsprojekt habe ich mit yFiles von herumgespielt yWorks und stellte fest, dass es eine ziemlich gute API hatte.

Kasse Blaupausen:

Blueprints ist eine Sammlung von Schnittstellen, Implementierungen, Ergänzungen und Testsuiten für das Eigenschaftsdiagramm-Datenmodell.Blueprints ist analog zu JDBC, jedoch für Diagrammdatenbanken.Innerhalb des TinkerPop Open-Source-Software-Stacks dient Blueprints als grundlegende Technologie für:

Rohre:Ein faules Datenfluss-Framework

Gremlin:Eine Graph-Traversal-Sprache

Rahmen:Ein Objekt-zu-Graph-Mapper

Ofen:Ein Paket für Graphalgorithmen

Rexster:Ein Graphserver

http://incubator.apache.org/hama/ ist ein verteiltes wissenschaftliches Paket auf Hadoop für umfangreiche Matrix- und Diagrammdaten.

JDSL (Data Structures Library in Java) sollte gut genug sein, wenn Sie sich für Diagrammalgorithmen interessieren - http://www.cs.brown.edu/cgc/jdsl/

Mit der Visualisierung hatte unsere Gruppe einige Erfolge Vorsicherung.Wir haben es erweitert, um architektonische Bodenplatten und Blasendiagramme zu verarbeiten, und es gab keine allzu großen Beanstandungen.Sie haben auch ein neues Flex-Toolkit namens Flare herausgebracht, das eine sehr ähnliche API verwendet.

AKTUALISIEREN:Ich muss dem Kommentar zustimmen, am Ende haben wir viele benutzerdefinierte Funktionen geschrieben/Vorsicherungseinschränkungen umgangen.Ich kann jedoch nicht sagen, dass es besser gewesen wäre, bei Null anzufangen, da wir durch den Einsatz von Prefuse vom ersten Tag an Fortschritte nachweisen konnten.Wenn wir andererseits eine zweite Implementierung desselben Materials durchführen würden, könnte ich Prefuse überspringen, da wir die Anforderungen viel besser verstehen würden.

Probieren Sie Annas aus, es ist ein Open-Source-Grafikpaket, mit dem man sich leicht vertraut machen kann

http://annas.googlecode.com

Es ist auch gut, davon überzeugt zu sein, dass ein Diagramm so einfach dargestellt werden kann:

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

und implementieren Sie die meisten Algorithmen, die Sie interessant finden, selbst.Wenn Sie mitten in einer Übungs-/Lernsitzung zu Diagrammen auf diese Frage stoßen, ist dies die beste Bibliothek, die Sie in Betracht ziehen sollten.;)

Sie können auch die Adjazenzmatrix für die gängigsten Algorithmen bevorzugen:

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

oder eine Matrix für einige Operationen:

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

Ich weiß nicht, ob ich es als produktionsbereit bezeichnen würde, aber es gibt sie jGABL.

Wenn Sie Leistung benötigen, schauen Sie sich vielleicht Grph an.Die Bibliothek wird an der französischen Universität und am CNRS/Inria entwickelt.

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

Das Projekt ist aktiv und es wird reaktive Unterstützung geleistet!

Anleitungsimplementierungen für Graphalgorithmen in Java finden Sie hier (von Prof.Sedgewick et al.):http://algs4.cs.princeton.edu/code/

Ich lernte sie kennen, als ich diese außergewöhnlichen Algorithmenkurse auf Coursera besuchte (ebenfalls unterrichtet von Prof.Sedgewick):

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

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

Wenn Sie tatsächlich nach Diagrammbibliotheken und nicht nach Knoten-/Kantendiagrammbibliotheken suchen, würde ich vorschlagen, sich die Big Faceless Graph-Bibliothek (BFG).Es ist viel einfacher zu verwenden als JFreeChart, sieht besser aus, läuft schneller, hat mehr Ausgabeoptionen, wirklich kein Vergleich.

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

Bietet eine leistungsstarke Software zum Arbeiten mit Diagrammen (direkt oder indirekt).Generiert auch Graphivz-Code, Sie können grafische Darstellungen sehen.Sie können Ihre eigenen Code-Algorithmen in ein Paket packen, zum Beispiel:Backtracking-Code.Das Paket stellt einige Algorithmen bereit:Dijkstra, Backtracking der minimalen Pfadkosten usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top