有没有人在图算法方面使用过好的Java库?我尝试过JGraph,觉得还可以,而且在Google上有很多不同的库。有没有人在实际生产代码中成功使用并推荐的库呢?
为了澄清,我不是在寻找生成图表/图形的库,我要的是那些有助于处理图算法(如最小生成树、Kruskal算法、节点、边等)的库。最好是带有一些很好的算法/数据结构和优美的Java OO API。
如果您正在使用JGraph,请尝试一下JGraphT,它专门设计用于算法。其中一个特点就是使用JGraph库进行可视化。该库仍在开发中,但已相当稳定。我曾经分析过JGraphT算法的复杂度。有些算法不是最快的,但如果您需要自己实现并显示图形,则它可能是最好的选择。我非常喜欢使用它的API,在必须快速编写处理图形并随后将其显示出来的应用时它非常有用。
摘要:
请看JGraphT,这是一个非常简单而强大的Java图形库,做得相当不错,需要说明的是,它与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 是一种很好的可视化选项,也有相当不错的可用图算法集,包括几种不同的随机图创建、重连等机制。我还发现,在必要时它通常很容易扩展和适应。
JGraphT是一个图形库,实现了许多算法,并且有一个(在我看来)良好的图形模型。Helloworld Example。许可证:LGPL+EPL。
JUNG2也是一个BSD许可的库,其数据结构类似于JGraphT。它提供了布局算法,而这些算法目前在JGraphT中尚未实现。最近的提交日期为2010年,hep.aida.*包是LGPL许可(通过colt library导入JUNG)。这使得JUNG不能在ASF和ESF项目的框架下使用。也许应该使用github fork并删除该依赖项。Commit f4ca0cd镜像了最后一次CVS提交。当前的提交似乎删除了可视化功能。Commit d0fb491c添加了.gitignore
。
http://neo4j.org/ 是一个图形数据库,包含许多图算法,并且比大多数内存库具有更好的可扩展性。
在一次大学项目中,我使用了由yWorks提供的 yFiles,并发现它拥有非常好的API。