237

有没有人对任何用于图形算法的 Java 库有很好的经验。我试过JGraph,发现没问题,google 里有很多不同的。是否有人实际在生产代码中成功使用或会推荐?

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

4

18 回答 18

111

如果您使用的是 JGraph,您应该尝试一下专为算法设计的JGraphT 。它的功能之一是使用 JGraph 库进行可视化。它仍在开发中,但相当稳定。前段时间分析过JGraphT算法的复杂度。其中一些不是最快的,但如果您要自己实现它们并且需要显示图表,那么它可能是最佳选择。我真的很喜欢使用它的 API,因为我很快就不得不编写一个处理图形并在以后显示它的应用程序。

于 2008-09-09T19:28:21.427 回答
68

概括:

于 2009-05-12T21:06:57.403 回答
41

查看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);
于 2008-09-09T14:49:18.833 回答
37

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

于 2008-09-09T11:36:03.463 回答
14

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 进行比较

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

JGraphT是一个图形库,实现了许多算法,并且(在我看来)具有良好的图形模型。你好世界的例子。许可证:LGPL+EPL。

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

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

Eclipse Zest内置了图形布局算法,可以独立于 SWT 使用。请参阅org.eclipse.zest.layouts.algorithms。使用的图形结构是Eclipse Draw2d之一,其中节点是显式对象,而不是通过泛型注入(就像在 Apache Commons Graph、JGraphT 和 JUNG2 中发生的那样)。

于 2013-05-22T19:04:37.680 回答
12

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

于 2010-03-24T09:12:30.383 回答
10

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

于 2008-09-09T11:20:13.173 回答
9

查看蓝图

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

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

Gremlin:一种图​​遍历语言

Frames:一个对象到图的映射器

Furnace:图形算法包

Rexster:图形服务器

于 2014-01-31T18:56:25.003 回答
7

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

于 2009-02-23T20:05:49.150 回答
7

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

于 2010-05-16T16:23:13.270 回答
5

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

更新:我不得不同意评论,我们最终编写了很多自定义功能/解决了前置限制。我不能说从头开始会更好,因为我们能够通过使用 prefuse 从第一天开始展示进步。另一方面,如果我们要对相同的东西进行第二次实现,我可能会跳过前言,因为我们会更好地理解需求。

于 2008-09-09T11:05:42.833 回答
5

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

http://annas.googlecode.com

于 2009-06-07T10:44:12.090 回答
5

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

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

并自己实现大多数您觉得有趣的算法。如果您在有关图表的一些练习/学习会议中遇到这个问题,那么这是要考虑的最佳库。;)

对于最常见的算法,您还可以更喜欢邻接矩阵:

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

或一些操作的矩阵:

class DenseGraph {
  int[] nodeValues;
  int[][] edges;     
}
于 2014-01-25T08:23:28.563 回答
4

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

于 2008-09-09T14:13:10.480 回答
4

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

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

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

于 2013-09-25T13:07:04.113 回答
3

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

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

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

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

于 2014-01-19T14:47:33.677 回答
0

如果您实际上是在寻找图表库而不是节点/边缘图库,我建议您在 Big Faceless Graph 库 ( BFG ) 上大手大脚。它比 JFreeChart 更容易使用,看起来更好,运行更快,输出选项更多,真的没有可比性。

于 2008-09-09T11:22:27.257 回答
0

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

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

于 2010-06-05T11:27:01.457 回答