libreria - java swing que es
¿Buena biblioteca de algoritmos de gráficos de Java? (18)
Apache Commons ofrece comunes-gráfico . Bajo http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/ se puede inspeccionar la fuente. El uso de la API de muestra también está en el SVN . Consulte https://issues.apache.org/jira/browse/SANDBOX-458 para obtener una lista de los algoritmos implementados, también en comparación con Jung, GraphT, Prefuse, jBPT
Google Guava si solo necesitas 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. Ejemplo de Helloworld . Licencia: LGPL + EPL.
Jung es también una biblioteca con licencia BSD con la 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 acs.lbl.gov/software/colt/license.html , que jung.sourceforge.net/download.html ). Esto evita que se use JUNG en proyectos bajo el paraguas de ASF y ESF. Tal vez uno debería usar el tenedor github y eliminar esa dependencia. github.com/rortian/jung2/commit/… está reflejando el último commit de CVS. Las confirmaciones actuales parecen eliminar la funcionalidad de visualización. Commit d0fb491c agrega un .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 de gráficos, 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 ocurre en Apache Commons Graph, JGraphT y JUNG2).
¿Alguien ha tenido buenas experiencias con alguna de las bibliotecas de Java para algoritmos de grafos. JGraph y lo encontré bien, y hay muchos diferentes en Google. ¿Hay alguna que la gente esté utilizando con éxito en el código de producción o la recomendaría?
Para aclarar, no estoy buscando una biblioteca que produzca gráficos / tablas, estoy buscando una que ayude con algoritmos de Gráficos, por ejemplo, árbol de expansión, Nodos de algoritmo de Kruskal, Bordes, etc. Idealmente uno con algunos algoritmos / datos buenos estructuras en una buena API de Java OO.
Echa un vistazo a JGraphT para una biblioteca de gráficos Java muy simple y poderosa que está bastante bien hecha y, para disipar cualquier confusión, es diferente de JGraph . Algún código de muestra :
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);
En un proyecto universitario jugué con yFiles by yWorks y encontré que tenía una API bastante buena.
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/
JGraph de http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html
Proporciona un software potente para trabajar con gráficos (directos o no directos). También genera código Graphivz, puedes ver representaciones gráficas. Puede poner sus propios algoritmos de código en pakage, por ejemplo: código de retroceso. El paquete proporciona algunos algoritmos: Dijkstra, costo mínimo de la ruta de retroceso, etc.
Las implementaciones del algoritmo de gráficos de instrucción 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):
No sé si lo llamaría listo para la producción, pero hay jGABL .
Para la visualización nuestro grupo tuvo cierto éxito con prefuse . Lo extendimos para manejar placas de piso arquitectónicas y diagramas de burbujas, y no se quejó demasiado. Tienen un nuevo kit de herramientas de Flex también llamado Flare que utiliza una API muy similar.
ACTUALIZACIÓN: Tendría que estar de acuerdo con el comentario, terminamos escribiendo una gran cantidad de funcionalidades personalizadas / trabajando alrededor de las limitaciones de prefijo. No puedo decir que empezar de cero hubiera sido mejor, ya que pudimos demostrar el progreso desde el primer día utilizando Prefuse. Por otro lado, si estuviéramos haciendo una segunda implementación de lo mismo, podría omitir prefuse ya que entenderíamos los requisitos mucho mejor.
Resumen:
- JGraphT si está más interesado en estructuras de datos y algoritmos.
- JGraph si tu enfoque principal es la visualización.
- Jung , yWorks y BFG son otras cosas que las personas intentaron usar.
- Prefuse es un no, ya que uno tiene que reescribir la mayor parte.
- Google Guava si solo necesitas buenas estructuras de datos.
- Apache Commons Graph . Actualmente inactivo, pero proporciona implementaciones para muchos algoritmos. Consulte https://issues.apache.org/jira/browse/SANDBOX-458 para obtener una lista de los algoritmos implementados, también en comparación con Jung, GraphT, Prefuse, jBPT
Si necesita rendimiento, puede echar un vistazo a Grph. La biblioteca se desarrolla en la universidad francesa y CNRS / Inria.
http://www.i3s.unice.fr/~hogie/grph/
El proyecto está activo y se proporciona soporte reactivo!
Si realmente está buscando bibliotecas de gráficos y no bibliotecas de gráficos de nodo / borde, sugeriría derrochar en la biblioteca de gráficos sin rostro grande ( BFG ). Es mucho más fácil de usar que JFreeChart, se ve mejor, corre más rápido, tiene más opciones de salida, realmente no hay comparación.
Si usabas JGraph, deberías intentar JGraphT que está diseñado para algoritmos. Una de sus características es la visualización utilizando la biblioteca JGraph. Todavía está desarrollado, pero bastante estable. Analicé la complejidad de los algoritmos JGraphT hace algún tiempo. Algunos de ellos no son los más rápidos, pero si los va a implementar por su cuenta y necesita mostrar su gráfico, entonces podría ser la mejor opción. Realmente me gustó usar su API, cuando rápidamente tuve que escribir una aplicación que estaba trabajando en el gráfico y luego la mostraba.
También es bueno estar convencido de que un gráfico se puede representar de la siguiente manera:
class Node {
int value;
List<Node> adj;
}
e implementa la mayoría de los algoritmos que te parezcan interesantes. Si cae en esta pregunta en medio de una sesión de práctica / aprendizaje en los gráficos, esa es la mejor libra para tener en cuenta. ;)
También puede preferir la matriz de adyacencia para los algoritmos más comunes:
class SparseGraph {
int[] nodeValues;
List<Integer>[] edges;
}
o una matriz para algunas operaciones:
class DenseGraph {
int[] nodeValues;
int[][] edges;
}
Try Annas es un paquete de gráficos de código abierto que es fácil de manejar con
echa un vistazo a los Blueprints :
Blueprints es una colección de interfaces, implementaciones, implementaciones y suites de prueba para el modelo de datos del gráfico de propiedad. Blueprints es análogo al JDBC, pero para bases de datos de gráficos. Dentro de la pila de software de código abierto TinkerPop, Blueprints sirve como la tecnología fundamental para:
Pipes : Un marco de flujo de datos perezoso.
Gremlin : una gráfica de lenguaje transversal
Frames : un mapeador de objeto a gráfico
Furnace : Un paquete de algoritmos gráficos.
Rexster : un servidor gráfico
http://incubator.apache.org/hama/ es un paquete científico distribuido en Hadoop para datos masivos de matrices y gráficos.
Jung es una buena opción para la visualización, y también tiene un conjunto bastante bueno de algoritmos de grafos disponibles, que incluyen varios mecanismos diferentes para la creación aleatoria de grafos, el recableado, etc. .
http://neo4j.org/ es una base de datos de gráficos que contiene muchos de los algoritmos de gráficos y se escala mejor que la mayoría de las bibliotecas en memoria.