Graph 使用邻接列表和哈希集实现图形

Graph 使用邻接列表和哈希集实现图形,graph,binary-search-tree,hashset,Graph,Binary Search Tree,Hashset,当我开始将图形实现为邻接列表时,我注意到 检查v1至v2是否为O(V)的运行时间 bool是相邻的(intv1,intv2){ 对于(int i=0;i

当我开始将图形实现为邻接列表时,我注意到 检查v1至v2是否为O(V)的运行时间

bool是相邻的(intv1,intv2){
对于(int i=0;i
循环一直工作到V(顶点数),所以它是O(V)

我可以用HashSet代替ArrayList或vector吗

它是
ArrayListgraph

Vector图形

现在我想知道为什么我们不能创造

ArrayList图形

这将使布尔是相邻的(intv1,intv2);O(1),因为哈希集中的搜索顺序是O(1)

如果hashset无法使用,因为它占用的内存比需要的多,那么二叉树呢

ArrayList

在这种情况下,搜索将比O(V)更好

有人能帮忙解释一下为什么以前没有创建这个实现吗?

是的,对于每个顶点,您可以(也应该)使用HashMap来存储其邻居列表

例如,对于V1,创建以下HashMap:

HashMap<Integer, Boolean> v1Adjacents = new HashMap<Integer, Boolean>();
HashMap<Integer, Boolean> v1Adjacents = new HashMap<Integer, Boolean>();
if(v1Adjacents.get(V2) != null){
...
}