当前位置: 首页 > 知识库问答 >
问题:

为什么深度优先搜索的空间复杂度不表示为O(n)?

丌官晨
2023-03-14

算法相对较新,所以如果我遗漏了一些显而易见的东西,请原谅!

我知道深度优先搜索的空间复杂度通常表示为O(h),其中h是树的高度,而广度优先搜索的复杂度是O(n),其中n是树中节点的数量。

我理解解释(例如在这个答案中https://stackoverflow.com/a/9844323/10083571)也就是说,在BFS中最坏的情况下,所有节点都在一个级别上,这意味着我们必须在遍历它们之前将所有节点排队。我还知道树的空间复杂度将由其高度决定,因为这将决定堆栈上需要存储的最大层。

我不明白的是,为什么这也不能表示为O(n)。根据与BFS最坏情况类似的推理,DFS最坏情况不是所有节点都在一个谱系中彼此下方吗?所以在最坏的情况下,树的高度将等于它的节点数。那么,为什么这不表示为O(n)?

谢谢

共有1个答案

通奕
2023-03-14

是的,但那不是真正的树,它是一个链表。Big-O是抽象的;当它声称一棵树的搜索是lg(n)时,它指的是一棵适当平衡的树,而不是一棵病态构造的树。

 类似资料:
  • 我已经查看了其他各种StackOverflow答案,它们都与我的讲师在幻灯片中写的不同。 深度优先搜索的时间复杂度为O(b^m),其中b是搜索树的最大分支因子,m是状态空间的最大深度。如果m比d大得多,这很糟糕,但如果搜索树“浓密”,则可能比广度优先搜索快得多。 他接着说。。 空间复杂度为O(bm),即动作序列长度的空间线性!只需要存储从根到叶节点的单个路径,以及路径上每个节点的剩余未扩展兄弟节点

  • 在我正在学习的一门算法课程中,据说深度优先搜索(DFS)比广度优先搜索(BFS)更节省空间。 为什么呢? 虽然它们基本上都在做相同的事情,但在DFS中,我们正在堆叠当前节点的后续节点,而在BFS中,我们正在将后续节点排队。

  • 二叉树上广度优先搜索的空间复杂度是多少?因为它一次只存储一个级别,我不认为它会是O(n)。

  • 本文向大家介绍什么是深度优先搜索?相关面试题,主要包含被问及什么是深度优先搜索?时的应答技巧和注意事项,需要的朋友参考一下 如算法名称那样,深度优先搜索所遵循的搜索策略是尽可能“深”地搜索树。它的基本思想是:为了求得问题的解,先选择某一种可能情况向前(子结点)探索,在探索过程中,一旦发现原来的选择不符合要求,就回溯至父亲结点重新选择另一结点,继续向前探索,如此反复进行,直至求得最优解。深度优先搜索

  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 我必须为一个算法开发伪代码,该算法计算给定顶点V和边E的图G=(V,E)中连通分量的数量。 我知道我可以使用深度优先搜索或广度优先搜索来计算连接组件的数量。 但是,我想用最高效的算法来解决这个问题,但是我不确定每个算法的复杂度。 下面是一个用伪代码形式写DFS的尝试。 下面尝试以伪代码形式编写 BFS。 我的讲师说BFS与DFS具有相同的复杂性。 然而,当我搜索深度优先搜索的复杂度时,它是O(V^