热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

算法学习–广度优先搜索和深度优先搜索

广度优先搜索BFS一、相关概念1.图的遍历:从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有节点访问一次且仅访问一次二、算法流程首先访问起始顶点v;接着由出发依次访

广度优先搜索BFS


一、相关概念

1.图的遍历: 从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有节点访问一次且仅访问一次


二、算法流程



  • 首先访问起始顶点 v ;

  • 接着由出发依次访问 v 的各个未被访问过的邻接顶点 \(w_1,w_2,...,w_i\) ;

  • 然后以此访问 \(w_1,w_2,...,w_i\) 的所有未被访问过的邻接顶点;

  • 再从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点;

  • ......, 以此类推;

方法:队列 + 辅助标记数组(标记节点是否被访问过)


三、算法实现过程图示



  • 初始化数组和队列,0表示为未被访问过



  • 将结点 1 入队,并修改标记数组中对应的0位置的值为1(表示结点1已经被访问过)



  • 将队首元素 1 出队,并将它的所有未被访问的邻接结点(要求辅助标记为0)入队,并修改相应辅助数组下标的值



  • 依次类推......


四、算法实现


五、算法性能分析



  • 空间复杂度: \(O(|V|)\) , 即顶点的数量大小(队列和辅助数组用到的空间大小都是顶点的数量大小)

  • 时间复杂度:取决于找邻接顶点的方法


邻接矩阵法的DFS(BFS)序列唯一,邻接表法的不唯一

深度优先搜索DFS


一、算法流程



  • 首先访问起始顶点 v ;

  • 接着由 v 出发访问 v 的任意一个邻接且未被访问的邻接顶点 \(w_i\);

  • 然后再访问与 \(w_i\) 邻接且未被访问过的任意顶点 \(y_i\);

  • \(w_i\) 没有邻接且未被访问的顶点时,就退回到它的上一层顶点 v ;

  • 重复上诉过程,知道所有的顶点被访问完为止。

方法:栈 + 辅助标记数组


二、算法实现


三、算法性能分析



  • 空间复杂度: \(O(|V|)\) , 即顶点的数量大小(工作栈和辅助数组用到的空间大小都是顶点的数量大小)

  • 时间复杂度: 根据找邻接结点的方式而定


四、如何通过遍历来判断连通性



  • 在无向图当中,在任意结点出发进行一次遍历 (调用一次BFS或者DFS),若能访问全部结点,说明该无向图是连通的;

  • 在无向图中,调用遍历函数(BFS或者DFS) 的次数为连通分量的个数;

  • 针对有向图,上述结论不成立:因为有向图是有方向的,从一个顶点出发不一定能返回来,但是无向图可以。



推荐阅读
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 自学编程与计算机专业背景者的差异分析
    本文探讨了自学编程者和计算机专业毕业生在技能、知识结构及职业发展上的不同之处,结合实际案例分析两者的优势与劣势。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 深入理解Java中的Collection接口与Collections工具类
    本文详细解析了Java中Collection接口和Collections工具类的区别与联系,帮助开发者更好地理解和使用这两个核心组件。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 堆是一种常见的数据结构,广泛应用于计算机科学领域。它通常表示为一棵完全二叉树,并可通过数组实现。堆的主要特性是每个节点的值与其父节点的值之间存在特定的关系,这使得堆在优先队列和排序算法中非常有用。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 近期遇到电脑网络不稳定和游戏时频繁重启的问题,寻求专业建议。网络环境为ADSL调制解调器通过路由器共享给两台电脑使用,怀疑存在ARP攻击或硬件配置问题。希望获得详细的故障排查和解决方案。 ... [详细]
author-avatar
靜钕孓626
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有