【发布时间】:2014-06-23 17:46:58
【问题描述】:
首先,我正在处理超过 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;
}
我的目标是:
- 我想随时按顶点的连通性(相邻点的数量)对顶点子集进行排序。
- 此外,我需要根据连接自身及其相邻节点的边的权重对顶点的相邻节点进行排序。
- 我想在不使用会减慢操作的空间的情况下执行这些操作。我应该考虑使用邻接矩阵吗?
【问题讨论】: