好的Java图算法库?

时间:2008-09-09 10:47:34

标签: java algorithm graph

有没有人对使用Graph算法的任何Java库有很好的经验。我已经尝试JGraph并且发现它没问题,谷歌中有很多不同的。是否有人实际在生产代码中成功使用或推荐?

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

18 个答案:

答案 0 :(得分:105)

如果您使用的是JGraph,则应尝试使用专为算法设计的JGraphT。它的一个功能是使用JGraph库进行可视化。它仍然开发,但非常稳定。我前段时间分析了JGraphT算法的复杂性。其中一些并不是最快的,但如果你要自己实现它们并需要显示你的图形,那么它可能是最好的选择。我真的很喜欢使用它的API,当我快速编写一个正在使用图形并稍后显示它的应用程序时。

答案 1 :(得分:59)

要点:

答案 2 :(得分:40)

查看JGraphT以获得一个非常简单且功能强大的Java图库,该图库做得非常好,为了消除任何混淆,与JGraph 不同。一些sample code

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

答案 3 :(得分:38)

JUNG是可视化的一个很好的选择,并且还有一套相当好的可用图算法,包括几种不同的随机图创建,重新布线等机制。我也发现它通常是公平的在必要时易于扩展和适应。

答案 4 :(得分:13)

Apache Commons提供commons-graph。在http://svn.apache.org/viewvc/commons/sandbox/graph/trunk/下,可以检查来源。示例API使用率也是in the SVN。有关已实施算法的列表,请参阅https://issues.apache.org/jira/browse/SANDBOX-458,并与Jung,GraphT,Prefuse,jBPT进行比较

Google Guava如果您只需要良好的数据结构。

JGraphT是一个图库,其中实现了许多算法,并且(在我的观点中)具有良好的图模型。 Helloworld Example。许可证:LGPL + EPL。

JUNG2也是一个BSD许可的库,其数据结构类似于JGraphT。它提供了JGraphT目前缺少的布局算法。最近的提交是从2010年开始的,而包hep.aida.*是LGPL(通过colt libraryis imported by JUNG)。这可以防止JUNG被用于ASF和ESF旗下的项目中。也许应该使用github fork并删除该依赖项。 Commit f4ca0cd正在镜像最后一次CVS提交。当前提交似乎删除了可视化功能。 Commit d0fb491c添加了.gitignore

Prefuse使用矩阵结构存储图形,这对于稀疏图形而言不是内存有效的。许可证:BSD

Eclipse Zest内置了图形布局算法,可以独立于SWT使用。见org.eclipse.zest.layouts.algorithms。使用的图形结构是Eclipse Draw2d中的一个,其中Nodes are explicit objects不通过泛型注入(在Apache Commons Graph,JGraphT和JUNG2中发生)。

答案 5 :(得分:12)

http://neo4j.org/是一个图形数据库,它包含许多图形算法,并且比大多数内存库更好地扩展。

答案 6 :(得分:10)

在一个大学项目中,我通过yWorks玩弄了yFiles,发现它有相当不错的API。

答案 7 :(得分:9)

结帐Blueprints

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

Pipes:一个懒惰的数据流框架

Gremlin:图表遍历语言

Frames:对象到图形的映射器

Furnace:图算法包

Rexster:图表服务器

答案 8 :(得分:7)

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

答案 9 :(得分:7)

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

答案 10 :(得分:5)

尝试使用Annas这是一个易于掌握的开源图形包

http://annas.googlecode.com

答案 11 :(得分:5)

同样可以确信Graph可以简单地表示为:

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

并实现大多数自己感兴趣的算法。如果您在图表上的某些练习/学习会话中遇到这个问题,那么这是最好的库。 ;)

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

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

或某些操作的矩阵:

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

答案 12 :(得分:5)

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

更新: 我不得不同意这个评论,我们最终编写了很多自定义功能/解决了prefuse限制。我不能说从头开始本来会更好,因为我们能够通过使用prefuse来证明从第1天开始的进展。另一方面,如果我们对同样的东西进行第二次实现,我可能会跳过prefuse,因为我们更了解这些要求。

答案 13 :(得分:4)

我不知道我是否将其称为生产就绪,但有jGABL

答案 14 :(得分:4)

如果你需要表现,你可以看一下Grph。该图书馆由法国大学和CNRS / Inria开发。

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

项目处于活动状态,并提供反应支持!

答案 15 :(得分:3)

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

我在介绍这些关于课程的特殊算法课程时也被介绍给他们(也由教授塞奇威克教授):

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

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

答案 16 :(得分:0)

如果您实际上正在寻找图表库而不是Node / Edge Graph库,我建议在Big Faceless Graph库(BFG)上进行挥霍。它比JFreeChart更容易使用,看起来更好,运行速度更快,输出选项更多,真的没有比较。

答案 17 :(得分:-1)

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

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