Depth first search 图中DFS和BFS的空间复杂度
我试图了解图中DFS和BFS的空间复杂度。 我知道当使用邻接矩阵时BFS的空间复杂度为Ov^2,其中v是顶点数 通过使用邻接表,在平均情况下(即Depth first search 图中DFS和BFS的空间复杂度,depth-first-search,breadth-first-search,space-complexity,Depth First Search,Breadth First Search,Space Complexity,我试图了解图中DFS和BFS的空间复杂度。 我知道当使用邻接矩阵时BFS的空间复杂度为Ov^2,其中v是顶点数 通过使用邻接表,在平均情况下(即
空间复杂度的严格界限是什么,对于图的BFS和DFS,如伪代码1所示,邻接矩阵或邻接列表的空间消耗不在BFS算法中。邻接矩阵或邻接列表是BFS算法的输入,因此不能包含在空间复杂度的计算中。DFS也是如此 伪码1 输入:图和图的起始顶点根 输出:目标状态。父链接将最短路径追溯到根
procedure BFS(G,start_v):
let Q be a queue
label start_v as discovered
Q.enqueue(start_v)
while Q is not empty
v = Q.dequeue()
if v is the goal:
return v
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered:
label w as discovered
w.parent = v
Q.enqueue(w)
BFS的空间复杂度可以表示为O | V |,其中| V |是顶点集的基数。因为在最坏的情况下,需要保留队列中的所有顶点
DFS的空间复杂性取决于实现。具有最坏情况空间复杂度O | E |的DFS的非递归实现如下所示,其中E是边集的基数:
procedure DFS-iterative(G,v):
let S be a stack
S.push(v)
while S is not empty
v = S.pop()
if v is not labeled as discovered:
label v as discovered
for all edges from v to w in G.adjacentEdges(v) do
S.push(w)
宽度优先搜索完成,而深度优先搜索未完成。如伪代码1所示,邻接矩阵或邻接列表的空间消耗不在BFS算法中。邻接矩阵或邻接列表是BFS算法的输入,因此不能包含在空间复杂度的计算中。DFS也是如此 伪码1 输入:图和图的起始顶点根 输出:目标状态。父链接将最短路径追溯到根
procedure BFS(G,start_v):
let Q be a queue
label start_v as discovered
Q.enqueue(start_v)
while Q is not empty
v = Q.dequeue()
if v is the goal:
return v
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered:
label w as discovered
w.parent = v
Q.enqueue(w)
BFS的空间复杂度可以表示为O | V |,其中| V |是顶点集的基数。因为在最坏的情况下,需要保留队列中的所有顶点
DFS的空间复杂性取决于实现。具有最坏情况空间复杂度O | E |的DFS的非递归实现如下所示,其中E是边集的基数:
procedure DFS-iterative(G,v):
let S be a stack
S.push(v)
while S is not empty
v = S.pop()
if v is not labeled as discovered:
label v as discovered
for all edges from v to w in G.adjacentEdges(v) do
S.push(w)
宽度优先搜索已完成,而深度优先搜索未完成