Hat jemand gute Erfahrungen mit Java-Bibliotheken für Graph-Algorithmen gemacht. Ich habe JGraph ausprobiert und fand es in Ordnung , und es gibt viele verschiedene in Google. Gibt es welche, die Leute tatsächlich erfolgreich im Produktionscode verwenden oder empfehlen würden?
Zur Verdeutlichung suche ich keine Bibliothek, die Diagramme / Diagramme erstellt, sondern eine, die bei Diagrammalgorithmen hilft, z. B. Minimum Spanning Tree, Kruskals Algorithmusknoten, Kanten usw. Idealerweise eine mit einigen guten Algorithmen / Daten Strukturen in einer schönen Java OO API.
Zusammenfassung:
quelle
In JGraphT finden Sie eine sehr einfache und leistungsstarke Java- Grafikbibliothek , die ziemlich gut gemacht ist und sich, um Verwirrung zu vermeiden, von JGraph unterscheidet . Einige Beispielcodes :
quelle
JUNG ist eine gute Option für die Visualisierung und verfügt auch über einen ziemlich guten Satz verfügbarer Diagrammalgorithmen, einschließlich verschiedener Mechanismen für die zufällige Erstellung, Neuverdrahtung von Diagrammen usw. Ich habe auch festgestellt, dass es im Allgemeinen ziemlich einfach ist, es zu erweitern und bei Bedarf anzupassen .
quelle
Apache Commons bietet Commons-Graph . Unter http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ kann die Quelle überprüft werden. Die Verwendung der Beispiel-API erfolgt auch im SVN . Unter https://issues.apache.org/jira/browse/SANDBOX-458 finden Sie eine Liste der implementierten Algorithmen, die auch mit Jung, GraphT, Prefuse und jBPT verglichen werden
Google Guava, wenn Sie nur gute Datenstrukturen benötigen.
JGraphT ist eine Graphbibliothek mit vielen implementierten Algorithmen und (meiner Meinung nach) einem guten Graphmodell. Helloworld Beispiel . Lizenz: LGPL + EPL.
JUNG2 ist auch eine BSD-lizenzierte Bibliothek mit einer ähnlichen Datenstruktur wie JGraphT. Es bietet Layouting-Algorithmen, die derzeit in JGraphT fehlen. Das letzte Commit stammt aus dem Jahr 2010 und aus Paketen
hep.aida.*
sind LGPL (über die Colt-Bibliothek , die von JUNG importiert wird ). Dies verhindert, dass JUNG in Projekten unter dem Dach von ASF und ESF eingesetzt wird. Vielleicht sollte man die Github-Gabel verwenden und diese Abhängigkeit entfernen. Commit f4ca0cd spiegelt das letzte CVS-Commit. Die aktuellen Commits scheinen die Visualisierungsfunktionen zu entfernen. Commit d0fb491c fügt a hinzu.gitignore
.Prefuse speichert die Diagramme unter Verwendung einer Matrixstruktur, die für spärliche Diagramme nicht speichereffizient ist. Lizenz: BSD
Eclipse Zest verfügt über integrierte Algorithmen für das Diagrammlayout, die unabhängig von SWT verwendet werden können. Sehen org.eclipse.zest.layouts.algorithms . Die verwendete Diagrammstruktur ist die von Eclipse Draw2d , bei der Knoten explizite Objekte sind und nicht über Generics injiziert werden (wie dies in Apache Commons Graph, JGraphT und JUNG2 der Fall ist).
quelle
http://neo4j.org/ ist eine Diagrammdatenbank, die viele Diagrammalgorithmen enthält und besser skaliert als die meisten In-Memory-Bibliotheken.
quelle
In einem Universitätsprojekt habe ich mit yFiles von yWorks herumgespielt und festgestellt, dass es eine ziemlich gute API hat.
quelle
Schauen Sie sich Blueprints an :
Blueprints ist eine Sammlung von Schnittstellen, Implementierungen, Erweiterungen und Testsuiten für das Datenmodell des Eigenschaftsgraphen. Blaupausen sind analog zu JDBC, jedoch für Diagrammdatenbanken. Innerhalb des Open-Source-Software-Stacks TinkerPop dient Blueprints als grundlegende Technologie für:
Pipes : Ein fauler Datenfluss-Framework
Gremlin : Eine Graph-Traversal-Sprache
Frames : Ein Object-to-Graph-Mapper
Ofen : Ein Paket mit Graphalgorithmen
Rexster : Ein Grafikserver
quelle
http://incubator.apache.org/hama/ ist ein verteiltes wissenschaftliches Paket auf Hadoop für massive Matrix- und Grafikdaten.
quelle
JDSL (Data Structures Library in Java) sollte gut genug sein, wenn Sie sich mit Graph-Algorithmen beschäftigen - http://www.cs.brown.edu/cgc/jdsl/
quelle
Zur Visualisierung hatte unsere Gruppe einige Erfolge mit Prefuse . Wir haben es erweitert, um architektonische Bodenplatten und Blasendiagramme zu handhaben, und es hat sich nicht allzu sehr beschwert. Sie haben auch ein neues Flex-Toolkit namens Flare herausgebracht, das eine sehr ähnliche API verwendet.
UPDATE: Ich muss dem Kommentar zustimmen, am Ende haben wir viele benutzerdefinierte Funktionen geschrieben / um die Einschränkungen der Präfuse herum gearbeitet. Ich kann nicht sagen, dass es besser gewesen wäre, von vorne anzufangen, da wir den Fortschritt vom ersten Tag an mit Prefuse demonstrieren konnten. Auf der anderen Seite, wenn wir eine zweite Implementierung des gleichen Materials durchführen würden, könnte ich Prefuse überspringen, da wir die Anforderungen viel besser verstehen würden.
quelle
Probieren Sie Annas aus, ein Open-Source-Grafikpaket, mit dem Sie sich leicht vertraut machen können
http://annas.googlecode.com
quelle
Es ist auch gut, davon überzeugt zu sein, dass ein Graph so einfach dargestellt werden kann wie:
und implementieren Sie die meisten Algorithmen, die Sie selbst interessant finden. Wenn Sie mitten in einer Übungs- / Lernsitzung auf Grafiken 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 meisten gängigen Algorithmen bevorzugen:
oder eine Matrix für einige Operationen:
quelle
Ich weiß nicht, ob ich es produktionsbereit nennen würde, aber es gibt jGABL .
quelle
Wenn Sie Leistung benötigen, können Sie sich Grph ansehen. 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 wird reaktiv unterstützt!
quelle
Implementierungen von Instructional Graph-Algorithmen in Java finden Sie hier (von Prof. Sedgewick et al.): Http://algs4.cs.princeton.edu/code/
Ich wurde ihnen vorgestellt, als ich an diesen außergewöhnlichen Algorithmuskursen auf Coursera teilnahm (ebenfalls unterrichtet von Prof. Sedgewick):
https://www.coursera.org/course/algs4partI
https://www.coursera.org/course/algs4partII
quelle
Wenn Sie tatsächlich nach Diagrammbibliotheken suchen und nicht nach Node / Edge Graph-Bibliotheken, würde ich empfehlen, die Big Faceless Graph Library ( BFG ) zu verwenden. Es ist viel einfacher zu bedienen als JFreeChart, sieht besser aus, läuft schneller, hat mehr Ausgabeoptionen, wirklich keinen Vergleich.
quelle
JGraph von http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html
Bietet eine leistungsstarke Software für die Arbeit mit Grafiken (direkt oder ungerichtet). Generiert auch Graphivz-Code, können Sie Grafikdarstellungen sehen. Sie können Ihre eigenen Codealgorithmen in Pakage einfügen, zum Beispiel: Backtracking-Code. Das Paket enthält einige Algorithmen: Dijkstra, Backtracking Minimun Path Cost, ect ..
quelle