好的Java图形算法库?
有没有人对使用任何适用于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,回溯最小路径成本等。