ami*_*mit 57
BFS:
时间复杂度为O(|V|),其中|V|是节点的数量,你需要遍历所有节点.
空间强制性也是O(|V|)如此 - 因为在最坏的情况下,您需要保留队列中的所有顶点.
DFS:
时间复杂度再次O(|V|),您需要遍历所有节点.
空间复杂性 - 取决于实现,递归实现可能具有O(h)空间复杂性[最坏情况],其中h是树的最大深度.
使用带有堆栈的迭代解决方案实际上与BFS相同,只是使用堆栈而不是队列 - 因此您获得O(|V|)时间和空间复杂性.
(*)请注意,对于树而言,空间复杂度和时间复杂度稍有不同,因为对于一般图形而言,因为您不需要visited为树维护集合|E| = O(|V|),因此该|E|因子实际上是多余的.
因为这是树遍历,所以我们必须触摸每个节点,使其为O(n),其中n是树中的节点数。
BFS将必须在队列中至少存储树的整个级别(示例队列实现)。对于一个完美的完全平衡的二叉树,这将是(n / 2 + 1)个节点(最后一层)。最佳情况(在这种情况下),树严重不平衡,并且在每个级别仅包含1个元素,并且空间复杂度为O(1)。最坏的情况是使用无用的N元树存储(n-1)个节点,其中除根节点之外的所有其他节点都位于第二层。
无论实现方式(递归还是迭代),堆栈(隐式或显式)都将包含d个节点,其中d是树的最大深度。对于平衡树,这将是(log n)个节点。DFS的最坏情况将是BFS的最佳情况,而DFS 的最佳情况将是BFS的最坏情况。
小智 5
复杂性有两个主要因素
这是生成节点所需的时间。
在DFS中,所需的时间与深度和分支因子成正比。对于DFS,所需的总时间由-
1 + b + b2 + b3 + ... + bd ~~ bd
因此,时间复杂度= O(bd)
它是获得解决方案所需的空间或内存量,DFS仅存储它正在追求的当前路径。因此,空间复杂度是深度的线性函数。
所以空间复杂度由 O(d)