好的Java图形算法库?

时间:2020-03-05 18:49:57  来源:igfitidea点击:

有没有人对使用任何适用于Graph算法的Java库有很好的经验。我已经尝试过JGraph并发现还可以,而且Google中有很多其他应用。人们实际上在生产代码中成功使用了什么,或者会推荐吗?

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

解决方案

回答

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

更新:
我必须同意这一评论,我们最终编写了许多自定义功能/围绕预包装限制工作。我不能说从头开始会更好,因为我们能够通过使用预熔来证明从第一天开始的进步。另一方面,如果我们要对相同的东西进行第二次实现,我可能会跳过预言,因为我们会更好地理解这些要求。

回答

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

回答

如果我们实际上是在寻找Charting库而不是Node / Edge Graph库,则建议我们使用Big Faceless Graph库(BFG)。它比JFreeChart易于使用,看起来更好,运行速度更快,具有更多输出选项,实际上没有可比性。

回答

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

回答

我不知道是否可以将其称为生产就绪型,但有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/

回答

概括:

  • 如果我们对数据结构和算法更感兴趣,请使用JGraphT。
  • JGraph,如果主要重点是可视化。
  • Jung,yWorks和BFG是其他人尝试使用的东西。
  • 因为必须重写大多数内容,所以预熔是不可以的。
  • 如果我们只需要良好的数据结构,请使用Google Guava。
  • Apache Commons图。当前处于休眠状态,但提供了许多算法的实现。有关已实现算法的列表,请参见https://issues.apache.org/jira/browse/SANDBOX-458,还与Jung,GraphT,Prefuse,jBPT进行了比较

回答

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

http://annas.googlecode.com

回答

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

回答

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

回答

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

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