首先,我处理超过1000条边的图形,并且我遍历邻接列表,以及每秒超过100次的顶点。因此,我真的需要一个符合我目标的高效实施。
我的顶点是整数,我的边是无向的,加权的。
我看过this代码
但是,它使用边缘对象对邻接列表进行建模。这意味着当我想要获得顶点的邻接时,我必须花费O(|adj|)
时间,其中|adj|
是其邻接的基数。
另一方面,我考虑使用Map<Integer, Double>[] adj
对邻接列表进行建模。
通过使用这种方法,我只需使用adj[v]
,v
作为顶点,并获取顶点的邻接来迭代。
另一种方法需要:
public Set<Integer> adj(int v)
{
Set<Integer> adjacents = new HashSet<>();
for(Edge e: adj[v])
adjacents.add(e.other(v));
return adjacents;
}
我的目标是:
答案 0 :(得分:1)
我已经将JGrapht用于图书馆,用于各种我自己的图表表示。他们在这里有一个加权图表实现:http://jgrapht.org/javadoc/org/jgrapht/graph/SimpleWeightedGraph.html
这似乎处理了很多你正在寻找的东西,并且我已经用它来表示最多约2000个顶点的图形,并且它可以很好地满足我的需求,尽管我不是记住我的访问率。