存储非有向图的最有效方法是什么?

时间:2011-02-14 21:17:47

标签: java graph graph-theory directed-graph

正如标题所说..在java中存储连接图的最有效方法是什么?

例如,假设我有多个位置以各种方式相互连接,我必须遍历图表以查看它是否已连接..任何帮助/评论都会有所帮助,谢谢!

5 个答案:

答案 0 :(得分:5)

一个经常使用的表示是由图中所有节点索引的矩阵(二维数组),如果存在从节点M[i,j] == truei的有向边,则j。主题的变体是存储两个节点之间边缘的长度/权重(缺失边缘可以用值-1表示)。

答案 1 :(得分:1)

使用没有对称性的adjacency matrix,从而表示方向而不是简单的邻接。

答案 2 :(得分:1)

使用incidenceadjacency矩阵可以解决问题。

如果您使用邻接矩阵,如果您有很多节点,sparse matrix可能会有效使用。 Colt提供了稀疏矩阵实现。信息取自this SO post

另外,我之前已成功使用过JUNG,所以你可能想看看它们是如何实现有向图的。

答案 3 :(得分:0)

为了查找效率 - 使用布尔矩阵(如果存在连接节点的弧,则为true,否则为false)。对于内存效率,将一个对象属性定义为其指向的(动态)对象列表。请注意,后者仅在图表中有大量节点时才有用。

答案 4 :(得分:0)

我错过了什么吗?数据已经是一个图表,只是序列化它。对于问题,因为矩阵的书面谈话是完全不成熟的。