广度优先和深度优先的树遍历的时间和空间复杂性是多少



有人能举例说明我们如何计算这两种遍历方法的时间和空间复杂性吗?

此外,深度优先遍历的递归解决方案如何影响时间和空间复杂性?

BFS:

时间复杂度为O(|V|),其中|V|是节点数。您需要遍历所有节点。
空间复杂性也是O(|V|),因为在最坏的情况下,您需要在队列中保留所有顶点。

DFS:

时间复杂度再次为O(|V|),需要遍历所有节点。
空间复杂性-取决于实现,递归实现可能具有O(h)空间复杂性[最坏情况],其中h是树的最大深度。
使用带有堆栈的迭代解决方案实际上与BFS相同,只是使用堆栈而不是队列,因此您可以获得O(|V|)的时间和空间复杂性。

(*)注意,树的空间复杂度和时间复杂度与一般图有点不同,因为你不需要为树维护visited集和|E| = O(|V|)集,所以|E|因子实际上是多余的。

DFS和BFS时间复杂性:O(n)

因为这是树遍历,所以我们必须接触每个节点,使其成为O(n),其中n是树中的节点数。

BFS空间复杂度:O(n)

BFS必须在队列中至少存储整个级别的树(示例队列实现)。对于一个完美的完全平衡的二叉树,这将是(n/2+1)个节点(最后一级)最佳情况(在这种情况下),树是严重不平衡的,每个级别只包含一个元素,空间复杂度为O(1)Worst Case将使用一个相当无用的n元树存储(n-1)个节点,其中除根节点外的所有节点都位于第二级。

DFS空间复杂性:O(d)

无论实现(递归或迭代)如何,堆栈(隐式或显式)都将包含d个节点,其中d是树的最大深度。对于平衡树,这将是(logn)个节点DFS的最坏情况将是BFS的最佳情况,而DFS的最佳情况BFS的最差情况。

的复杂性有两个主要因素

  1. 时间复杂性
  2. 空间复杂性

时间复杂性

它是生成节点所需的时间量。

在DFS中,所需的时间量与深度和分支因子成比例。对于DFS,所需的总时间由-给出

1+b+b2+b3+…+bd~~bd

因此时间复杂度=O(bd)


空间复杂性

它是获得解决方案所需的空间或内存量DFS只存储它所追求的当前路径。因此,空间复杂性是深度的线性函数。

因此空间复杂度由O(d)

给出

最新更新