当我开始将图实现为邻接列表时,我注意到检查 v1 是否与 v2 相邻的运行时间是 O(V)
bool isAdjacent(int v1, int v2){
for(int i = 0; i < V; ++i){
if(this.graph[v1][i] == v2){ return true; }
}
return false;
}
循环一直工作到 V(顶点数),所以它是 O(V)
我可以使用 HashSet 代替 ArrayList 或 vector 吗?
它是ArrayList< ArrayList<Integer> > graph;
或者Vector< Vector<Integer> > graph;
现在我想知道为什么我们不能创造
ArrayList<HashSet> 图;
这将使 bool isAdjacent(int v1, int v2); O(1) 因为在 HashSet 中搜索的顺序是 O(1) ?
如果 hashset 不能使用,因为它占用的内存比需要的多,那么二叉树呢??
ArrayList< Binary_Tree > 图;
在这种情况下,搜索将比 O(lg V) 好于 O(V)
任何人都可以帮忙,为什么之前没有创建这个实现?