¿Alguien ha tenido buenas experiencias con bibliotecas Java para algoritmos Graph? Intenté JGraph y lo encontré bien, y hay muchos diferentes en google. ¿Hay alguna que la gente realmente esté usando con éxito en el código de producción o recomendaría?
Para aclarar, no estoy buscando una biblioteca que produzca gráficos / tablas, estoy buscando una que ayude con los algoritmos de gráficos, por ejemplo, árbol de expansión mínima, algoritmos de Kruskal, nodos, bordes, etc. Idealmente uno con algunos buenos algoritmos / datos estructuras en una bonita API Java OO.
Resumen:
fuente
Echa un vistazo a JGraphT para obtener una biblioteca de gráficos Java muy simple y potente que está bastante bien hecha y, para disipar cualquier confusión, es diferente a JGraph . Algún código de muestra :
fuente
JUNG es una buena opción para la visualización, y también tiene un conjunto bastante bueno de algoritmos de gráficos disponibles, incluidos varios mecanismos diferentes para la creación aleatoria de gráficos, cableado, etc. También he encontrado que en general es bastante fácil de extender y adaptar cuando sea necesario .
fuente
Apache Commons ofrece commons-graph . En http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ se puede inspeccionar la fuente. El uso de API de muestra también está en el SVN . Consulte https://issues.apache.org/jira/browse/SANDBOX-458 para obtener una lista de algoritmos implementados, también en comparación con Jung, GraphT, Prefuse, jBPT
Google Guava si solo necesita buenas estructuras de datos.
JGraphT es una biblioteca gráfica con muchos algoritmos implementados y que tiene (en mi opinión) un buen modelo gráfico. Helloworld Ejemplo . Licencia: LGPL + EPL.
JUNG2 también es una biblioteca con licencia BSD con una estructura de datos similar a JGraphT. Ofrece algoritmos de diseño, que actualmente faltan en JGraphT. La confirmación más reciente es de 2010 y los paquetes
hep.aida.*
son LGPL (a través de la biblioteca colt , que es importada por JUNG ). Esto evita que JUNG se use en proyectos bajo el paraguas de ASF y ESF. Tal vez uno debería usar la bifurcación de github y eliminar esa dependencia. Commit f4ca0cd está reflejando el último commit de CVS. Las confirmaciones actuales parecen eliminar la funcionalidad de visualización. Commit d0fb491c agrega a.gitignore
.Prefuse almacena los gráficos utilizando una estructura matricial, que no es eficiente en memoria para gráficos dispersos. Licencia: BSD
Eclipse Zest ha incorporado algoritmos de diseño gráfico, que se pueden usar independientemente de SWT. Ver org.eclipse.zest.layouts.algorithms . La estructura gráfica utilizada es la de Eclipse Draw2d , donde los nodos son objetos explícitos y no se inyectan a través de genéricos (como sucede en Apache Commons Graph, JGraphT y JUNG2).
fuente
http://neo4j.org/ es una base de datos de gráficos que contiene muchos algoritmos de gráficos y escalas mejor que la mayoría de las bibliotecas en memoria.
fuente
En un proyecto universitario, jugué con yFiles de yWorks y descubrí que tenía una API bastante buena.
fuente
echa un vistazo a Blueprints :
Blueprints es una colección de interfaces, implementaciones, implementaciones y conjuntos de pruebas para el modelo de datos del gráfico de propiedades. Blueprints es análogo al JDBC, pero para bases de datos gráficas. Dentro de la pila de software de código abierto TinkerPop, Blueprints sirve como la tecnología fundamental para:
Tubos : un marco de flujo de datos perezoso
Gremlin : un lenguaje gráfico transversal
Marcos : un mapeador de objeto a gráfico
Horno : un paquete de algoritmos gráficos
Rexster : un servidor de gráficos
fuente
http://incubator.apache.org/hama/ es un paquete científico distribuido en Hadoop para datos masivos de matriz y gráfico.
fuente
JDSL (Biblioteca de estructuras de datos en Java) debería ser lo suficientemente bueno si te gustan los algoritmos de gráficos: http://www.cs.brown.edu/cgc/jdsl/
fuente
Para la visualización, nuestro grupo tuvo cierto éxito con prefuse . Lo extendimos para manejar planchas arquitectónicas y diagramas de burbujas, y no se quejó demasiado. También tienen un nuevo kit de herramientas Flex llamado Flare que usa una API muy similar.
ACTUALIZACIÓN: tendría que estar de acuerdo con el comentario, terminamos escribiendo muchas funcionalidades personalizadas / solucionando las limitaciones de prefuse. Sin embargo, no puedo decir que comenzar desde cero hubiera sido mejor, ya que pudimos demostrar el progreso desde el día 1 usando prefuse. Por otro lado, si estuviéramos haciendo una segunda implementación de las mismas cosas, podría omitir prefuse ya que entenderíamos los requisitos mucho mejor.
fuente
Pruebe Annas es un paquete de gráficos de código abierto que es fácil de manejar
http://annas.googlecode.com
fuente
También es bueno estar convencido de que un gráfico se puede representar tan simplemente como:
e implementa la mayoría de los algoritmos que encuentres interesantes por ti mismo. Si caes en esta pregunta en medio de una sesión de práctica / aprendizaje en gráficos, esa es la mejor opción a considerar. ;)
También puede preferir la matriz de adyacencia para los algoritmos más comunes:
o una matriz para algunas operaciones:
fuente
No sé si lo llamaría listo para producción, pero hay jGABL .
fuente
Si necesita rendimiento, puede echar un vistazo a Grph. La biblioteca está desarrollada en la Universidad francesa y CNRS / Inria.
http://www.i3s.unice.fr/~hogie/grph/
El proyecto está activo y se proporciona soporte reactivo.
fuente
Las implementaciones de algoritmos de gráficos instructivos en Java se pueden encontrar aquí (por el profesor Sedgewick et al.): Http://algs4.cs.princeton.edu/code/
Me presentaron a ellos mientras asistía a estos cursos de algoritmos excepcionales en Coursera (también impartidos por el profesor Sedgewick):
https://www.coursera.org/course/algs4partI
https://www.coursera.org/course/algs4partII
fuente
Si realmente está buscando bibliotecas de gráficos y no bibliotecas de gráficos de nodo / borde, sugeriría derrochar en la biblioteca Big Faceless Graph ( BFG ). Es mucho más fácil de usar que JFreeChart, se ve mejor, funciona más rápido, tiene más opciones de salida, realmente no hay comparación.
fuente
JGraph de http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html
Proporciona un software potente para trabajar con gráficos (directos o indirectos). También genera código Graphivz, puede ver representaciones gráficas. Puede poner sus propios algoritmos de código en el paquete, por ejemplo: código de retroceso. El paquete proporciona algunos algoritmos: Dijkstra, retroceso de costo mínimo de ruta, etc.
fuente