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

有人可以用一个例子来解释我们如何计算这两种遍历方法的时间和空间复杂度?

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

20

2018-03-23 17:56

起源


维基百科上提供了相当不错的解释: en.wikipedia.org/wiki/Depth-first_search  en.wikipedia.org/wiki/Breadth-first_search - hc_

@hc_:维基百科文章讨论了DFS必须维护的一般图表 visited 组。这不是树木的必需品。 - amit


答案:


BFS:

时间复杂性是 O(|V|) 哪里 |V| 是节点数,需要遍历所有节点。 
太空竞争力是 O(|V|) 同样 - 因为在最坏的情况下你需要保持队列中的所有顶点。

DFS:

时间复杂性再次出现 O(|V|),你需要遍历所有节点。 
空间复杂性 - 取决于实现,递归实现可以有一个 O(h) 空间复杂性[最坏情况],在哪里 h 是树的最大深度。 
使用带有堆栈的迭代解决方案实际上与BFS相同,只是使用堆栈而不是队列 - 所以你得到两者 O(|V|) 时间和空间的复杂性。

(*)请注意,对于树而言,空间复杂度和时间复杂度稍有不同,因此对于一般图形而言,因为您不需要维护 visited 设置为一棵树,和 |E| = O(|V|), 所以 |E| 因素实际上是多余的。

40

2018-03-23 18:04


“你不需要维护树的访问集”我认为在BFS中你需要维护一个访问集,你能提供一个参考。 - archie

@ 500_error对于一个 树,您不需要访问集 - 因为从根到每个节点都有一条路径。访问集的目的是避免多次重新扩展同一节点,但由于存在单个路径 - 不可能发生(在有向图中 - 不需要任何更多数据,在无向图中,需要记住父节点前面的每个节点都是这样的) - amit

我不确定这个答案是否正确?它说DFS的空间复杂度是使用堆栈的O(| V |)。但是,堆栈实现仅使用O(bd)空间,其中b是分支因子,d是深度。但是,bd!= V.另一方面,b ^ d = V.因此,我认为空间复杂度可以通过O(bd)更紧密地界定,而不是说O(| V |)。 - nave

@nave在最坏的情况下,这是 O(|V|),因为假设你有一个长度分支 |V|/2,你将不得不持有所有这些 |V|/2 堆栈中的节点。请注意,答案说这是最糟糕的情况。 - amit

@amit - 在迭代实现中,当访问时,分别从DFS和BFS的堆栈或队列中弹出节点。那么为什么空间复杂度是O(N)?未访问的堆栈或队列永远不会包含所有节点。我哪里错了? - Jack


复杂性有两个主要因素

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

时间复杂性

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

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

1 + b + b2 + b3 + ... + bd ~~ bd

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


空间复杂性

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

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

4

2018-05-15 10:02


这不适用于树遍历,这是一种特殊情况。所以这个答案可能会产生误导。 - xji


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

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

BFS空间复杂度:O(n)

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

DFS空间复杂度:O(d)

无论实现(递归还是迭代),堆栈(隐式或显式)都将包含d个节点,其中d是树的最大深度。使用平衡树,这将是(log n)节点。 最坏的情况下 对于DFS来说,这将是BFS的最佳案例 最佳案例 DFS将是BFS最糟糕的情况。

广度优先和深度优先树遍历的时间和空间复杂度是多少?相关推荐

  1. 树遍历(深度优先和广度优先)

    目录 深度优先 先序遍历 后序遍历 广度优先 对于树结构的遍历一般有深度优先和广度优先 广度优先和深度优先的概念很简单,区别如下: 深度优先,访问完一颗子树再去访问后面的子树,而访问子树的时候,先访问 ...

  2. 树-广度优先和深度优先搜索算法

    广度优先和深度优先搜索算法 本章主要讲述广度优先搜索算法BFS(Breadth First Search)和深度优先算法DFS(Depth First Search). 广度优先:从起点开始由近及远进 ...

  3. 数据结构--图--图的数组存储表示,深度优先搜索遍历和广度优先搜索遍历

    图有四种存储结构:数组,邻接表,十字链表,邻接多重表.下面以数组为存储结构来实现图的深度优先搜索遍历和广度优先搜索遍历.其中广度优先搜索遍历中有用到STL中的queue,注意头文件的包含.具体代码如下 ...

  4. 【图数据结构的遍历】java实现广度优先和深度优先遍历

    [图数据结构的遍历]java实现广度优先和深度优先遍历 宽度优先搜索(BFS)遍历图需要使用队列queue数据结构: 深度优先搜索(DFS, Depth First Search)的实现 需要使用到栈 ...

  5. 常用算法2 - 广度优先搜索 深度优先搜索 (python实现)

    1. 图 定义:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合. 简单点的说:图由节点和边组成.一 ...

  6. 【搜索算法】深度优先搜索遍历

    深度优先,顾名思义是向纵深处遍历树或图,如下图所示: 遍历顺序为1–3–6–9–13–12–5–2–4–8–11–7–10 每次都看向树的右子树,当右子树全部看完后再回到树根向左看(回溯),因此采用堆 ...

  7. 一群算法_树遍历解释:他们就像一群懒惰的学生,试图欺骗他们的考试

    一群算法 by Sachin Malhotra 由Sachin Malhotra 树遍历解释:他们就像一群懒惰的学生,试图欺骗他们的考试 (Tree Traversals explained: The ...

  8. 【Python7】csv/excel/matplotlib,排序/树遍历,线/进程,文件/xml操作,百度人脸API,aiohttp/hal/restful/curl

    文章目录 1.csv 2.excel 3.matplotlib 4.时间复杂度 5.顺序表/链表 6.六种排序 6.1 选择 6.2 插入 6.3 希尔 6.4 冒泡 6.5 快排 6.6 归并 7. ...

  9. python虚拟机 基于寄存器_虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩...

    转载:http://rednaxelafx.iteye.com/blog/492667 大前天收到一条PM: 引用 你好,很冒昧的向你发短消 息,我现在在看JS引擎,能过看博客发现你对js engin ...

最新文章

  1. 5、JUC--实现 Callable 接口
  2. 记一次使用 android 自带 WebView 做富文本编辑器之API、机型的兼容及各种奇葩bug的解决...
  3. oracle 查看连接数
  4. 内蒙古农大孙志宏教授证实超深度混合宏基因组测序能够对人类肠道微生物组中的低丰度物种进行基因组和功能表征...
  5. 软件测试 学习之路 CSS (二)
  6. 《深入理解分布式事务》第九章 可靠消息最终一致性分布式事务原理
  7. 深入浅出MFC - C++ 重要性质
  8. ENVI5.3下载和安装
  9. ANSYS mesh网格划分
  10. 拼多多联盟-使用pid和custom_parameters进行备案
  11. Go语言十大排序算法
  12. Android开发实现选择城市界面,可根据拼音、首字母进行搜索
  13. 如何使单片机复位可靠,单片机复位电路?
  14. Type-C笔记本电脑全功能TCPC接口方案
  15. Tomcat服务器日志输出格式设置
  16. java毕业设计图书借阅管理系统mybatis+源码+调试部署+系统+数据库+lw
  17. w7系统出现无法更新服务器,win7系统自动更新选项不能用了的解决方法
  18. php steam 第三方登录,Steam第三方授权登录异常 《绝地求生》国服绑定中招
  19. function 与 => 的区别
  20. PyPDF2为PDF文件起始页添加罗马数字

热门文章

  1. html 抽奖的页面,html网页抽奖
  2. GPLT团体程序设计天梯赛 L1-088 静静的推荐
  3. G - 非常可乐--重复广搜
  4. WIN10右下角(通知和操作中心)弹出小广告解决办法
  5. AK消防 注册消防工程师 要点汇总 建筑消防性能化防火设计
  6. java-接口之运动员教练员综合案例
  7. SpringBoot 实现 Office 各种格式在线预览(详细教程,包教包会)
  8. 丑数_题目1214:丑数
  9. 2014年度企业云存储盘点
  10. 多线程并发在电商系统下的追本溯源-电商实战