算法导论--广度优先搜索和深度优先搜索
广度优先搜索
在给定图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
算法导论--广度优先搜索和深度优先搜索相关推荐
- LeetCode算法总结-回溯法与深度优先搜索
转载自 LeetCode算法总结-回溯法与深度优先搜索 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退 ...
- 【算法】蓝桥杯dfs深度优先搜索之排列组合总结
[导航] 上一篇文章 → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,再次声明下文的大部分灵感均来自于[CSDN]梅森上校<JAVA版本:DFS算法题解两 ...
- 【算法】蓝桥杯dfs深度优先搜索之图连通总结
前言 上两篇文章 → <[算法]蓝桥杯dfs深度优先搜索之排列组合总结> → <[算法]蓝桥杯dfs深度优先搜索之凑算式总结> 为了重申感谢之意,第三次声明下文的 ...
- AI(人工智能:一种现代的方法)学习之:无信息搜索(uninformed search)算法——广度优先搜索、深度优先搜索、Uniform-cost search
文章目录 参考 搜索算法 深度优先搜索 depth-first search 性能分析 完整性 complete 最优性 optimal 时间复杂度 空间复杂度 广度优先搜索 breadth-firs ...
- 八数码深度优先搜索_深度优先搜索和广度优先搜索
深度优先搜索和广度优先搜索 关于搜索&遍历 对于搜索来说,我们绝大多数情况下处理的都是叫 "所谓的暴力搜索" ,或者是说比较简单朴素的搜索,也就是说你在搜索的时候没有任何所 ...
- 广度优先搜索与深度优先搜索
广度优先搜索(宽度优先搜索,BFS)和深度优先搜索(DFS)算法的应用非常广泛,本篇文章主要介绍BFS与DFS的原理.实现和应用. 深度优先搜索 图的深度优先搜索(Depth First Search ...
- 根据邻接表求深度优先搜索和广度优先搜索_深度优先搜索/广度优先搜索与java的实现...
度:某个顶点的度就是依附于该顶点的边的个数 子图:一幅图中所有边(包含依附边的顶点)的子集 路径:是由边顺序连接的一系列定点组成 环:至少含有一条边且终点和起点相同的路径 连通图:如果图中任一个到另一 ...
- 广度优先搜索_深度优先搜索和广度优先搜索[09]
搜索与遍历 绝大多数搜索的处理叫暴力搜索,或者说比较简单朴素的搜索.如果数据结构本身没有任何特点,很普通的树或者图,我们要做的一件事就是把所有节点都遍历一次. 每个节点都要访问一次 每个节点仅仅要访问 ...
- 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码
自古逢秋悲寂寥,我言秋日胜春朝 二叉树结构说明 本博客使用树节点结构,如下所示: Kotlin 版本 class TreeNode(var value: String, var leftNode: T ...
最新文章
- 微信这个坑**的内置浏览器--我很无语
- 使用malloc之前需要做什么准备工作。
- NYOJ 289 苹果
- 6年Java程序员年薪60W,这些年我都爬过哪些坑(2021年终总结)
- 三种Ext提交数据的方法(转)
- 浅谈iptables防SYN Flood攻击和CC攻击
- 居然还能这样——程序员加薪的新方法
- 【C语言】创建一个函数,并调用比较两个数的大小
- React虚拟DOM的理解
- Spark.2.2源码阅读: SPARK SUBMIT任务提交
- webpack debug
- 网页布局:左边为导航,右边正文,左边和右边的高度总是相等,或者导航最低高度为屏幕高度...
- 和别人老公上床后的感觉~
- devcon-计算机硬件设备的禁用与启动说明
- 软件实施工程师到底是干什么的?全方位介绍实施工程师的职责要求和发展前景
- HI3518EV200初体验
- 用pandas进行数据分析实战
- 软件定义网络实验之SDN网络简单管理及开发
- 【项目数据优化一】敏感数据脱敏处理
- 【OpenCvSharp】使用SSIM指数衡量图片相似度
热门文章
- L1,L2,L3三级缓存
- 在数据中心空间进行测试
- 判断是否为自然数java_java判断输入的是否是自然数
- python排名分析_用Python分析了近几年胡润排行榜,我酸了……
- csv导入mysql linux_如何将CSV文件导入MySQL表
- axure rp 创建弹框_如何在Axure RP 9中创建交换机
- ui设计师常用的设计工具_2020年应该使用哪个UI设计工具?
- 我很喜欢玩游戏,那么我就适合做游戏程序员吗?
- hive(II)--sql考查的高频问题
- 操作Checkbox标签