好的Javagraphicsalgorithm库?

有没有人有任何Java图书馆algorithm的好经验。 我已经试过JGraph ,发现它确定,并在谷歌有很多不同的。 有没有人实际使用生产代码或推荐?

为了澄清,我不寻找一个产生graphics/图表的图书馆,我正在寻找一个graphicsalgorithm,如最小生成树,克鲁斯卡尔的algorithm节点,边缘,等理想的一个有一些好的algorithm/数据结构在一个不错的Java OO API中。

如果你使用JGraph,你应该尝试一下为algorithmdevise的JGraphT 。 它的一个特点是使用JGraph库进行可视化。 它还在开发中,但相当稳定。 我前段时间分析了JGraphTalgorithm的复杂性。 其中一些不是最快的,但是如果你要自己实现它们并需要显示你的图表,那么它可能是最好的select。 我非常喜欢使用它的API,当时我不得不写一个正在处理graphics的应用程序,并在稍后显示它。

概要:

查看一下JGraphT是一个非常简单而强大的Javagraphics库,它的function相当出色,为了消除混淆, 与JGraph不同 。 一些示例代码 :

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是可视化的一个很好的select,也有一套相当不错的可用graphicsalgorithm,包括随机graphics创build,重新布线等几种不同的机制。我也发现它通常相当容易扩展和适应需要的地方。

在我用yWorks玩yFiles的一个大学项目中,发现它有非常好的API。

检查蓝图 :

蓝图是属性图数据模型的接口,实现,耦合和testing套件的集合。 蓝图类似于JDBC,但是对于graphics数据库。 在TinkerPop开放源代码软件堆栈中,Blueprints作为基础技术:

pipe道 :一个懒惰的数据stream框架

Gremlin :graphics遍历语言

框架 :一个对象映射器

炉子 :图algorithm包

Rexster :一个graphics服务器

Apache Commons提供commons-graph 。 在http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/下可以查看源代码。; 样例API使用也在SVN中 。 请参阅https://issues.apache.org/jira/browse/SANDBOX-458获取已实现algorithm的列表,并将其与Jung,GraphT,Prefuse,; jBPT

谷歌番石榴,如果你只需要好的数据结构。

JGraphT是一个图表库,有许多algorithm实现,并有(在我的看法)一个很好的graphics模型。 Helloworld示例 。 许可证:LGPL + EPL。

JUNG2也是BSD许可的库,其数据结构类似于JGraphT。 它提供了布局algorithm,目前在JGraphT中缺less。 最近的提交是从2010年开始的,包hep.aida.*是LGPL(通过由JUNG导入的小马库 )。 这可以防止JUNG被用于ASF和ESF的项目中。 也许应该使用github fork并删除依赖。 提交f4ca0cd镜像最后一个CVS提交。 目前的提交似乎删除了可视化function。 提交d0fb491c添加一个.gitignore

Prefuse使用matrix结构存储graphics,这对于稀疏graphics来说不是有效的。 许可证:BSD

Eclipse Zest内置了graphics布局algorithm,可以独立于SWT使用。 请参阅org.eclipse.zest.layouts.algorithms 。 所使用的graphics结构是Eclipse Draw2d ,其中节点是显式对象,而不是通过generics注入(就像在Apache Commons Graph,JGraphT和JUNG2中那样)。

JDSL(Java中的数据结构库)应该足够好,如果你使用图algorithm – http://www.cs.brown.edu/cgc/jdsl/

为了可视化,我们小组在prefuse方面取得了一些成功。 我们把它扩展到处理build筑地板和气泡图,并没有太多抱怨。 他们有一个新的Flex工具包,也叫做Flare,它使用了非常相似的API。

更新:我不得不同意评论,我们写了很多自定义function/解决prefuse限制。 我不能说从头开始会更好,虽然我们能够从第一天使用prefuse展示进步。 另一方面,如果我们再次执行相同的任务,则可能会跳过prefuse,因为我们会更好地理解需求。

试试Annas是一个易于掌握的开源graphics包

http://annas.googlecode.com

我不知道是否可以称之为生产准备,但是有jGABL 。

也可以确信图表可以简单表示为:

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

并实现大多数你自己感兴趣的algorithm。 如果您在图表上的某个练习/学习课程中遇到这个问题,那么这是最好的考虑。 ;)

您也可以select最常用algorithm的邻接matrix:

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

或者一些操作的matrix:

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

如果你需要表演,你可以看看Grph。 该图书馆是在法国大学和CNRS / Inria开发的。

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

该项目是积极的和被动的支持提供!

在java中的教学图algorithm实现可以在这里find(由Sedgewick等人教授): http : //algs4.cs.princeton.edu/code/

我在介绍他们的同时参加了coursera的这些特殊algorithm课程(也是由Sedgewick教授授课):

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

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

如果你真的在寻找图表库,而不是为节点/边缘图库,我会build议浪费大无面图库( BFG )。 它比JFreeChart更容易使用,看起来更好,运行速度更快,有更多的输出选项,真的没有比较。

来自http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html的; JGraph

提供一个强大的软件来处理graphics(直接或不直接)。 还生成Graphivz代码,你可以看到graphics表示。 你可以把你自己的代码algorithm放入pakage中,例如:回溯代码。 该包提供了一些algorithm:Dijkstra,回溯最小path成本,等等。