相关疑难解决方法(0)

广度优先搜索时间复杂度分析

例如,遍历顶点的每个相邻边的时间复杂度O(N),其中N是相邻边的数量.因此,对于V个顶点,时间复杂度变为O(V*N)= O(E),其中E是图中边的总数.由于从队列中删除和添加顶点是O(1),为什么它被添加到BFS的总体时间复杂度中O(V+E).

algorithm graph breadth-first-search time-complexity

35
推荐指数
4
解决办法
5万
查看次数

14
推荐指数
2
解决办法
1万
查看次数

为什么BFS O(V + E)的复杂性代替O(V*E)?

这里有一些伪代码(无视我的风格)

从v1开始(入队):

function BFS(queue Q)
  v2 = dequeue Q
  enqueue all unvisited connected nodes of v2 into Q
  BFS(Q)
end // maybe minor problems here
Run Code Online (Sandbox Code Playgroud)

由于图中有V个顶点,并且这些V顶点连接到E边,并且访问连接节点(相当于访问连接边)是在内部循环中(外部循环是递归本身),在我看来复杂性应该是O(V*E)而不是O(V + E).有人能为我解释一下吗?

algorithm complexity-theory breadth-first-search

11
推荐指数
1
解决办法
6983
查看次数

为什么BFS/DFS的时间复杂度不仅仅是O(E)而不是O(E + V)?

我知道堆栈溢出中存在类似的问题,其中一个人问过,为什么BFS/DFS的时间复杂度不仅仅是O(V).

给出的适当答案是在完整图的情况下E可以与V ^ 2一样大,因此在时间复杂度中包括E是有效的.

但是,如果V不能大于E + 1.那么,在那种情况下,时间复杂度中没有V,应该有效吗?

graph breadth-first-search time-complexity depth-first-search

11
推荐指数
1
解决办法
1973
查看次数