2008-09-09 88 views
240

有没有人对Graph算法的任何Java库有很好的经验。我试过JGraph,发现它没问题,而且google中有很多不同的东西。有没有人实际使用生产代码或推荐?为了澄清,我不是在寻找一个产生图形/图表的图书馆,我正在寻找一个可以帮助图表算法的图表,例如最小生成树,克鲁斯卡尔算法节点,边缘等。理想情况下,良好的Java OO API中的算法/数据结构。好的Java图算法库?

回答

98

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

+0

JGraph现在有一个分析包,包括一系列分析功能,http://jgraph.github.com/mxgraph/java/docs/index.html。 – David 2013-03-25 20:56:19

5

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

更新: 我不得不同意评论,我们最终写了很多定制功能/解决prefuse限制。我不能说从头开始会更好,因为我们能够通过使用prefuse从第1天展示进步。另一方面,如果我们再次执行相同的任务,则可能会跳过prefuse,因为我们会更好地理解需求。

+0

你对prefuse有什么个人想法?在我上一份工作中,一个项目开始使用它,但最终以90%以上的版本重新编写(并优化了,并增加了新功能)prefuse。 – 2008-09-09 11:33:22

10

在一个大学项目中,我玩弄了yFiles yWorks,发现它有非常好的API。

+0

我已经使用yFiles进行数据项目之间相互依赖关系的可视化(作为商业软件平台的一部分)。我没有真正使用任何图分析算法,但检查y.algo包是否具有您需要的: http://www.yworks.com/products/yfiles/doc/api/ – Jonik 2009-02-01 19:35:03

+1

yFiles不是开源的,但提供商业许可证 – koppor 2013-05-22 18:47:04

0

如果你真的在寻找图表库,而不是为节点/边缘图库,我会建议在Big Faceless Graph库(BFG)上挥霍。它比JFreeChart更容易使用,看起来更好,运行速度更快,有更多的输出选项,真的没有比较。

+0

您误解了这个问题:它是关于具有节点和边缘的那种图形,而不是那种有馅饼和条形的图形。 – amarillion 2011-10-20 10:55:19

36

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

+0

包hep.aida。*是LGPL(http://acs.lbl.gov/software/colt/license.html)。这是通过马驹(http://jung.sourceforge.net/download.html)导入的。这可以防止JUNG被用于ASF和ESF的项目中。 也许应该使用github fork https:// github。com/rortian/jung2并删除该依赖项。 https://github.com/rortian/jung2/commit/f4ca0cdcd3312589cbb48de7350b84cbff6067b9是镜像最后的CVS提交。目前的提交似乎删除了可视化功能。 – koppor 2013-05-26 11:58:24

+0

自2010年以来没有发布,我认为这个项目被放弃 – Yacino 2017-05-12 08:35:37

4

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

38

退房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); 
+0

这是一个伟大的演示在这里https://github.com/jgrapht/jgrapht/wiki/DirectedGraphDemo – 2016-02-17 23:54:38

7

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

+0

谢谢你,我从来没有遇到它。你在使用它吗? – 2009-02-24 09:31:13

45

摘要:

11

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

-2

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

JGraph提供一个功能强大的软件与图形(直接或undirect)工作。还生成Graphivz代码,您可以看到图形表示。您可以将自己的代码算法放入pakage中,例如:回溯代码。该包提供了一些算法:Dijkstra,backtracking minimun路径成本等。

10

Apache Commons offers 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 library,其中is 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中发生的那样)。

4

这也是很好的确信,一个图可表示为:

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

并实现大多数您自己感兴趣的算法。如果你在图表的某个练习/学习环节的中间出现这个问题,这是最好的考虑。 ;)

你也可以喜欢邻接矩阵为最常见的算法:

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

或矩阵的一些操作:

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

退房Blueprints

蓝图是一家集用于属性图数据模型的接口,实现,耦合和测试套件。蓝图类似于JDBC,但对于图形数据库。内的TinkerPop有关开源软件栈,蓝图作为基础技术为:

Pipes:懒惰,数据流框架

Gremlin:一个图的遍历语言

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

Furnace:图形算法包

Rexster:图形服务器