Answers:
摘要:
在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);
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年,软件包hep.aida.*
为LGPL(通过colt库(由JUNG导入))。这样可以避免在ASF和ESF的框架下将JUNG用于项目中。也许应该使用github分支并删除该依赖项。提交f4ca0cd正在镜像最后的CVS提交。当前的提交似乎删除了可视化功能。提交d0fb491c添加一个.gitignore
。
Prefuse使用矩阵结构存储图,对于稀疏图,这种结构对内存的存储效率不高。许可:BSD
Eclipse Zest具有内置的图形布局算法,可以独立于SWT使用。请参阅org.eclipse.zest.layouts.algorithms。所使用的图结构是Eclipse Draw2d之一,其中的节点是显式对象,而不是通过泛型注入的(就像在Apache Commons Graph,JGraphT和JUNG2中那样)。
在一个大学项目中,我戏弄了yWorks的yFiles,发现它具有相当不错的API。
http://incubator.apache.org/hama/是Hadoop上的分布式科学软件包,用于处理大量矩阵和图形数据。
如果您喜欢图算法,那么JDSL(Java中的数据结构库)应该足够好-http: //www.cs.brown.edu/cgc/jdsl/
为了可视化,我们小组在预涂方面取得了一些成功。我们将其扩展为可以处理建筑地板和气泡图,并且它不会抱怨太多。他们有一个新的Flex工具箱,也称为Flare,它使用非常相似的API。
更新:我必须同意这一评论,我们最终编写了许多自定义功能/围绕预用限制进行工作。我不能说从头开始会更好,因为我们能够通过使用预熔来证明从第一天开始的进步。另一方面,如果我们要对相同的东西进行第二次实现,我可能会跳过预言,因为我们会更好地理解这些要求。
试试Annas,这是一个易于掌握的开源图形包
如果需要性能,可以看一下Grph。该图书馆是在法国大学和CNRS / Inria开发的。
http://www.i3s.unice.fr/~hogie/grph/
该项目处于活动状态,并提供了反应式支持!
可以在此处找到Java的教学图算法实现(Sedgewick等人教授):http : //algs4.cs.princeton.edu/code/
在参加这些有关Coursera的特殊算法课程时(也由Sedgewick教授教授)向我介绍了他们:
如果您实际上是在寻找Charting库而不是Node / Edge Graph库,则建议您使用Big Faceless Graph库(BFG)。它比JFreeChart易于使用,看起来更好,运行更快,具有更多输出选项,实际上没有可比性。
来自http://mmengineer.blogspot.com/2009/10/java-graph-floyd-class.html的 JGraph
提供功能强大的软件来处理图形(直接或非直接)。同时生成Graphivz代码,可以看到图形表示。您可以将自己的代码算法放入包装中,例如:回溯代码。该软件包提供了一些算法:Dijkstra,回溯最小路径成本等。