好的Java图算法库?

有人对图形算法的Java库有很好的经验吗?我已经尝试了JGraph,发现它是可以的,在谷歌中有很多不同的。有哪些是人们在实际生产代码中成功使用或推荐的?

澄清一下,我不是在寻找一个生成图形/图表的库,我在寻找一个有助于图算法的库,例如最小生成树,Kruskal的算法节点,边等。理想情况下,它在一个漂亮的Java OO API中具有一些良好的算法/数据结构。

215378 次浏览

对于可视化,我们的小组使用prefuse取得了一些成功。我们扩展了它来处理建筑地板和气泡图,它没有太多抱怨。他们也推出了一个新的Flex工具包,叫做Flare,它使用了非常相似的API。

< p >更新: 我不得不同意这个评论,我们最终写了很多自定义功能/围绕prefuse限制工作。我不能说从头开始会更好,因为我们能够从第一天开始使用prefuse来演示进度。另一方面,如果我们正在做相同东西的第二个实现,我可能会跳过prefuse,因为我们会更好地理解需求

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

如果你实际上是在寻找图表库,而不是节点/边缘图库,我建议挥霍大无面图库(高炉煤气)。它比JFreeChart更容易使用,看起来更好,运行更快,有更多的输出选项,真的没有可比性。

荣格是一个很好的可视化选项,也有一个相当好的可用的图形算法集,包括几种不同的随机图形创建机制,重布线等。我还发现,在必要的地方扩展和调整它通常相当容易。

我不知道我是否可以称之为生产就绪,但有jGABL

查看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);

如果你正在使用JGraph,你应该尝试JGraphT,它是为算法设计的。它的特性之一是使用JGraph库进行可视化。它仍在发展,但相当稳定。我之前分析了JGraphT算法的复杂性。其中一些并不是最快的,但是如果您要自己实现它们,并且需要显示您的图表,那么它可能是最好的选择。我真的很喜欢使用它的API,当我很快就不得不写一个应用程序,在图形上工作,然后显示它。

JDSL (Java中的数据结构库)应该足够好,如果你进入图算法- http://www.cs.brown.edu/cgc/jdsl/

简介:

试试Annas吧,它是一个开源的图形包,很容易掌握

http://annas.googlecode.com

http://neo4j.org/是一个包含许多图算法的图数据库,并且比大多数内存库的伸缩性更好。

http://incubator.apache.org/hama/是Hadoop上用于大量矩阵和图形数据的分布式科学包。

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

提供了一个强大的软件来处理图形(直接或非直接)。还生成了Graphivz代码,可以看到图形表示。您可以将自己的代码算法放入包中,例如:回溯代码。该软件包提供了一些算法:Dijkstra,回溯最小路径代价等。

Apache Commons提供commons-graph。在http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/下可以检查源代码。示例API用法也是在SVN中。参见https://issues.apache.org/jira/browse/SANDBOX-458获得实现的算法列表,也与Jung, GraphT, Prefuse, jBPT进行比较

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

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

JUNG2也是一个bsd许可的库,其数据结构类似于JGraphT。它提供了目前在JGraphT中所缺少的布局算法。最近的一次提交是在2010年,hep.aida.*包是LGPL(通过柯尔特图书馆由JUNG导入)。这就阻止了JUNG在ASF和ESF框架下的项目中使用。也许应该使用github叉并删除该依赖项。提交f4ca0cd正在镜像上一次CVS提交。当前的提交似乎删除了可视化功能。提交d0fb491c添加一个.gitignore

Prefuse使用矩阵结构存储图,这对于稀疏图来说内存效率不高。许可:BSD

Eclipse的热情内置了图形布局算法,可以独立于SWT使用。看到org.eclipse.zest.layouts.algorithms。使用的图结构是Eclipse Draw2d,其中节点是显式对象并不是通过泛型注入的(就像在Apache Commons graph、JGraphT和JUNG2中那样)。

如果需要性能,可以看看Grph。该图书馆由法国大学和CNRS/Inria开发。

< a href = " http://www.i3s.unice.fr/ hogie / grph /”rel =“nofollow”> http://www.i3s.unice.fr/ hogie grph / < / >

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

java中的教学图算法实现可以在这里找到(由教授Sedgewick等人): http://algs4.cs.princeton.edu/code/ < / p >

我是在coursera上参加这些优秀的算法课程时被介绍给他们的(也由Sedgewick教授教授):

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

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

相信一个图可以简单地表示为:

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

实现大部分你自己感兴趣的算法。如果您在一些关于图形的练习/学习过程中遇到了这个问题,那么这是最好的库。;)

对于大多数常见算法,你也可以选择邻接矩阵:

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

或者一些运算的矩阵:

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

检查蓝图:

蓝图是属性图数据模型的接口、实现、实现和测试套件的集合。蓝图类似于JDBC,但用于图形数据库。在TinkerPop开源软件堆栈中,蓝图作为基础技术用于:

管道:一个懒惰的数据流框架

小鬼:一个图遍历语言

:对象到图的映射器

:一个图算法包

Rexster:一个图形服务器