Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Depth first search 图中DFS和BFS的空间复杂度_Depth First Search_Breadth First Search_Space Complexity - Fatal编程技术网

Depth first search 图中DFS和BFS的空间复杂度

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是顶点数 通过使用邻接表,在平均情况下(即

我试图了解图中DFS和BFS的空间复杂度。 我知道当使用邻接矩阵时BFS的空间复杂度为Ov^2,其中v是顶点数

通过使用邻接表,在平均情况下(即 但是,DFS的情况是什么? 即使我们使用邻接矩阵/列表。空间复杂度为Ov^2。但这似乎是一个非常松散的界限,在不考虑堆栈帧的情况下也是如此

关于复杂性,我说得对吗? 如果不是,BFS/DFS的空间复杂性是什么? 在计算DFS的空间复杂度时,是否考虑栈帧?


空间复杂度的严格界限是什么,对于图的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)
宽度优先搜索已完成,而深度优先搜索未完成