
Good Java graph algorithm library?有没有人对Graph算法的任何Java库有很好的经验。 我已经尝试过JGraph并且发现它没问题,谷歌中有很多不同的版本。 是否有人实际在生产代码中成功使用或推荐? 为了澄清,我不是在寻找一个生成图形/图表的库,我正在寻找一个有助于Graph算法的库,例如最小生成树,Kruskal的算法节点,边缘等。理想情况下,它有一些好的算法/数据 一个不错的Java OO API中的结构。 如果您使用的是JGraph,那么您应该尝试使用专为算法设计的JGraphT。它的一个功能是使用JGraph库进行可视化。它仍然开发,但非常稳定。我前段时间分析了JGraphT算法的复杂性。其中一些并不是最快的,但如果你要自己实现它们并需要显示你的图形,那么它可能是最好的选择。我真的很喜欢使用它的API,当我快速编写一个正在使用图形并稍后显示它的应用程序时。 摘要:
查看JGraphT是一个非常简单而强大的Java图形库,它做得很好,为了减轻任何混淆,与JGraph不同。一些示例代码:
JUNG是可视化的一个很好的选择,并且还有一套相当好的可用图形算法,包括用于随机图形创建,重新布线等的几种不同机制。我还发现它通常很容易扩展并在必要时进行调整。 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是一个图形库,其中实现了许多算法并且(在我的观点中)具有良好的图形模型。 Helloworld示例。许可证:LGPL + EPL。
JUNG2也是一个BSD许可的库,其数据结构类似于JGraphT。它提供了JGraphT目前缺少的布局算法。最近的提交是从2010年开始,包 Prefuse使用矩阵结构存储图形,这对于稀疏图形而言不是内存有效的。许可证:BSD Eclipse Zest内置了图形布局算法,可以独立于SWT使用。请参阅org.eclipse.zest.layouts.algorithms。使用的图形结构是Eclipse Draw2d之一,其中节点是显式对象,而不是通过泛型注入(在Apache Commons Graph,JGraphT和JUNG2中发生)。 http://neo4j.org/是一个图形数据库,它包含许多图形算法,并且比大多数内存库更好地扩展。 在一个大学项目中,我通过yWorks玩弄了yFiles,发现它有相当不错的API。 查看蓝图: 蓝图是属性图数据模型的接口,实现,ouplement和测试套件的集合。蓝图类似于JDBC,但对于图形数据库。在TinkerPop开源软件堆栈中,Blueprints作为以下基础技术: 管道:一个懒惰的数据流框架 Gremlin:图形遍历语言 框架:对象到图形的映射器 熔炉:图算法包 Rexster:图形服务器 如果您使用图形算法,JDSL(Java中的数据结构库)应该足够好 - http://www.cs.brown.edu/cgc/jdsl/ http://incubator.apache.org/hama/是Hadoop上用于海量矩阵和图形数据的分布式科学软件包。 为了实现可视化,我们小组在预煮方面取得了一些成功我们将它扩展到处理建筑地板和气泡图,并没有抱怨太多。他们有一个新的Flex工具包,也称为Flare,它使用非常相似的API。
更新: 确信Graph可以简单地表示为:
并实现大多数你自己感兴趣的算法。如果您在图表上的某些练习/学习会话中遇到这个问题,那么这是最好的库。 ;) 对于大多数常见算法,您也可以更喜欢邻接矩阵:
或某些操作的矩阵:
试试Annas它的开源图形包,很容易掌握 http://annas.googlecode.com 如果你需要性能,你可以看一下Grph。该图书馆由法国大学和CNRS / Inria开发。 http://www.i3s.unice.fr/~hogie/grph/ 该项目是活跃的,并提供反应支持! 我不知道我是否称它为生产就绪,但有jGABL。
可以在这里找到java中的教学图算法实现(由教授Sedgewick等人): 在课程中参加这些特殊的算法课程时我也被介绍给他们(也由教授塞奇威克教授): https://www.coursera.org/course/algs4partI https://www.coursera.org/course/algs4partII 如果您实际上正在寻找Charting库而不是Node / Edge Graph库,我建议在Big Faceless Graph库(BFG)上进行扩展。它比JFreeChart更容易使用,看起来更好,运行速度更快,输出选项更多,真的没有比较。 来自http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html的JGraph 提供功能强大的软件来处理图形(直接或非直接)。还可以生成Graphivz代码,您可以看到图形表示。您可以将自己的代码算法放入pakage中,例如:回溯代码。该软件包提供了一些算法:Dijkstra,回溯最小路径成本等。 |