广度优先搜索

在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G中的边,以期“发现”可从s 到达的所有顶点,并计算s 到所有这些可达顶点之间的距离(即最少的边数)。该搜索算法同时还能生成一棵根为s、且包括所有s 的可达顶点的广度优先树。对从s 可达的任意顶点v,广度优先树中从s 到v 的路径对应于图G中从s 到v 的一条最短路径,即包含最少边数的路径。该算法对有向图和无向图同样适用。

具体算法详情见 算法—12.广度优先搜索

算法分析:

现在分析一下该算法在输入图G=(V,E)上的运行时间。此处采用聚集分析技术,在初始化后,再没有任何顶点被置为白色。因此,第13行中的测试保证了每个顶点至多只进入队列一次,因而至多只从队列中出来一次。入队和出队操作需要O(1)的时间,因此队列操作所需的全部时间为O(V)。因为只有当每个顶点将出队时,才会扫描其邻接表,因而每个顶点的邻接表至多被扫描一次。由于所有邻接表的长度和为O(E),故扫描所有邻接表所花费的全部时间为O(E)。初始化操作的开销为O(V),于是,过程BFS的总运行时间为O(V+E)。由此可见,广度优先搜索的运行时间是图G的邻接表大小的一个线性函数。

深度优先搜索

正如“深度优先搜索”这一名称所暗示的那样,这种搜索算法所遵循的搜索策略是尽可能“深”地搜索一个图。在深度优先搜索中,对于最新发现的顶点,如果它还有以此为起点而未探测到的边,就沿此边继续探测下去。当顶点v的所有边都已被探寻过后,搜索将回溯到发现顶点v 有起始点的那些边。这一过程一直进行到已发现从源顶点可达的所有顶点时为止。如果还存在未被发现的顶点,则选择其中一个作为源顶点,并重复以上过程。整个过程反复进行,直到所有的顶点都已被发现时为止。

算法—11.深度优先搜索

算法分析:

DFS中第1~3行和第5~7行中的循环占用的时间为O(V),这不包括调用DFS-VISIT的时间。就像我们在处理广度优先搜索时一样,采用聚集分析。对于每个顶点vΕV,过程DFS-VISIT仅被调用一次,因为只有对白色顶点才会调用该过程,且该过程所做的第一件事就是将顶点置为灰色。在DFS-VISIT(v)的一次执行过程中,第4~7行中的循环被执行了| Adj[v] |次。因为有

故执行过程DFS-VISIT中第4~7行的总代价为O(E)。因此,DFS的运行时间为O(V+E)。

转载于:https://www.cnblogs.com/joey-hua/p/6197058.html

算法导论--广度优先搜索和深度优先搜索相关推荐

  1. LeetCode算法总结-回溯法与深度优先搜索

    转载自  LeetCode算法总结-回溯法与深度优先搜索 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退 ...

  2. 【算法】蓝桥杯dfs深度优先搜索之排列组合总结

    [导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...

  3. 【算法】蓝桥杯dfs深度优先搜索之图连通总结

    前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结>      → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结>   为了重申感谢之意,第三次声明下文的 ...

  4. AI(人工智能:一种现代的方法)学习之:无信息搜索(uninformed search)算法——广度优先搜索、深度优先搜索、Uniform-cost search

    文章目录 参考 搜索算法 深度优先搜索 depth-first search 性能分析 完整性 complete 最优性 optimal 时间复杂度 空间复杂度 广度优先搜索 breadth-firs ...

  5. 八数码深度优先搜索_深度优先搜索和广度优先搜索

    深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...

  6. 广度优先搜索与深度优先搜索

    广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...

  7. 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...

    度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...

  8. 广度优先搜索_深度优先搜索和广度优先搜索[09]

    搜索与遍历 绝大多数搜索的处理叫暴力搜索,或者说比较简单朴素的搜索.如果数据结构本身没有任何特点,很普通的树或者图,我们要做的一件事就是把所有节点都遍历一次. 每个节点都要访问一次 每个节点仅仅要访问 ...

  9. 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

    自古逢秋悲寂寥,我言秋日胜春朝 二叉树结构说明 本博客使用树节点结构,如下所示: Kotlin 版本 class TreeNode(var value: String, var leftNode: T ...

最新文章

  1. 微信这个坑**的内置浏览器--我很无语
  2. 使用malloc之前需要做什么准备工作。
  3. NYOJ 289 苹果
  4. 6年Java程序员年薪60W,这些年我都爬过哪些坑(2021年终总结)
  5. 三种Ext提交数据的方法(转)
  6. 浅谈iptables防SYN Flood攻击和CC攻击
  7. 居然还能这样——程序员加薪的新方法
  8. 【C语言】创建一个函数,并调用比较两个数的大小
  9. React虚拟DOM的理解
  10. Spark.2.2源码阅读: SPARK SUBMIT任务提交
  11. webpack debug
  12. 网页布局:左边为导航,右边正文,左边和右边的高度总是相等,或者导航最低高度为屏幕高度...
  13. 和别人老公上床后的感觉~
  14. devcon-计算机硬件设备的禁用与启动说明
  15. 软件实施工程师到底是干什么的?全方位介绍实施工程师的职责要求和发展前景
  16. HI3518EV200初体验
  17. 用pandas进行数据分析实战
  18. 软件定义网络实验之SDN网络简单管理及开发
  19. 【项目数据优化一】敏感数据脱敏处理
  20. 【OpenCvSharp】使用SSIM指数衡量图片相似度

热门文章

  1. L1,L2,L3三级缓存
  2. 在数据中心空间进行测试
  3. 判断是否为自然数java_java判断输入的是否是自然数
  4. python排名分析_用Python分析了近几年胡润排行榜,我酸了……
  5. csv导入mysql linux_如何将CSV文件导入MySQL表
  6. axure rp 创建弹框_如何在Axure RP 9中创建交换机
  7. ui设计师常用的设计工具_2020年应该使用哪个UI设计工具?
  8. 我很喜欢玩游戏,那么我就适合做游戏程序员吗?
  9. hive(II)--sql考查的高频问题
  10. 操作Checkbox标签