有人对图形算法的Java库有很好的经验吗?我已经尝试了JGraph,发现它是可以的,在谷歌中有很多不同的。有哪些是人们在实际生产代码中成功使用或推荐的?
澄清一下,我不是在寻找一个生成图形/图表的库,我在寻找一个有助于图算法的库,例如最小生成树,Kruskal的算法节点,边等。理想情况下,它在一个漂亮的Java OO API中具有一些良好的算法/数据结构。
对于可视化,我们的小组使用prefuse取得了一些成功。我们扩展了它来处理建筑地板和气泡图,它没有太多抱怨。他们也推出了一个新的Flex工具包,叫做Flare,它使用了非常相似的API。
在一个大学项目中,我用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。
hep.aida.*
.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:一个图形服务器