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

标签 algorithm

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

另外,深度优先遍历的递归解对时空复杂度有什么影响?

最佳答案

BFS:

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

DFS:

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

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

关于algorithm - 广度优先和深度优先树遍历的时间和空间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9844193/

相关文章:

algorithm - 查找未知语言中的所有不同字符以及它们之间的词典顺序关系

java - 使用 4 个选项对数组进行排序的算法

.NET - 如何将 "caps"分隔字符串拆分为数组?

python - 如何解决大小为 sum+1 的数组的子集和问题

algorithm - 如何用一条线分割一个多边形?

c++ - 为什么算法在第一个条件后结束?

ruby - 使用 ruby​​ 类中的方法进行迭代

圆内包装圆的算法?

带有嵌套 for 循环的 Python 代码太慢

算法问题: Best angle to view trees from fixed camera