当前位置: 首页 > news >正文

深度优先探索

DFS:

时间复杂度:一位数组:O(n)二维数组+标记:O(n^2),有时候还可能使O(2^n),总而言之DFS的时间复杂度比较高。(个人认为)

深度优先搜索算法(DFS)原理:

深度优先搜索(Depth First Search, DFS)是一种用于遍历或搜索树或图的算法。该方法从根节点(选择任意一个顶点作为起始节点,在无向图中适用)开始,尽可能深地沿着每条分支进行探索直到不能再前进为止;之后回退并重复这一过程直至所有节点都被访问过。(简单来说就是尝试每种可能直至成功,或所以可能都尝试过)。

在具体执行过程中,当遇到未被访问过的邻接点时就立即转向下一个新路径继续探查而不是返回上一层级再做其他尝试。这种特性使得DFS非常适合用来解决连通分量检测、迷宫求解等问题

深度优先搜索算法(DFS)的详细执行步骤(一般是用递归实现)

1. 初始化

创建一个栈用于存储待访问的节点,并标记已访问过的节点以防重复访问。通常会使用布尔数组来记录哪些节点已经被访问。

2. 访问初始节点

选择一个起点作为当前正在处理的第一个顶点,将其压入栈并设置为已访问状态1

3. 进行深度探索

从栈顶取出一个未被完全扩展的节点u,对于每一个与之相邻且未曾访问过的邻居v:

  • 将该邻接点设为已访问;
  • 把它加入到栈中以便后续进一步考察其连接情况;

如果遇到死胡同即无法继续前进,则返回上一步操作前的状态——弹出堆栈顶端元素直至找到可以拓展的新路径位置或全部完成遍历过程。

4. 结束条件

当所有可达区域均已被探测完毕之后停止循环结构。

DFS 的优缺点

  • 优点

    • 实现简单(递归或栈)。

    • 空间复杂度较低(与树/图的高度相关)。

  • 缺点

    • 可能陷入无限循环(需标记已访问节点)。

    • 不保证找到最优解(如最短路径需改用 BFS)。

今天没学什么所以水一下(虽然天天水)。

http://www.dtcms.com/a/26011.html

相关文章:

  • Java的switch
  • Nacos 2.5.0 内置数据库集群部署
  • 如何将Docker运行的镜像写入数据后导出为新的镜像
  • 【小白学HTML5】盒模型(一文讲清margin、padding)_第三讲
  • Stm32定时器输出PWM
  • Fast R-CNN
  • 【小白学HTML5】盒模型_第一讲
  • 前端框架虚拟DOM的产生
  • 面试题之手写call,apply,bind
  • 【Elasticsearch】近实时搜索与刷新机制
  • cs*n 网页内容转为html 加入 onenote
  • 整合Salesmart/WhatsApp、开源Odoo模块和Deepseek AI能力,实现针对国外客户的智能客服和个性化推荐服务
  • 计算机网络抄手 运输层
  • 【Javascript Day19】BOM
  • Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
  • deepseek-r1系列模型部署分别需要的最低硬件配置
  • 4.7 模型训练基类Trainer:Hugging Face工业级训练引擎深度剖析
  • windows事件倒计时器与提醒组件
  • 4.6 模型训练基类Trainer:Hugging Face工业级训练引擎深度剖析
  • java数据结构_优先级队列(堆)_6.1
  • 挖掘图片的秘密:如何用piexif提取和修改Exif数据
  • 当我问Deepseek:国产8K摄像机有哪些?
  • WebSocket(WS)协议系列(二)事件机制
  • 防泄密软件可以管理电脑的使用,还能防止数据泄漏... 原创
  • 使用Catcho阻止app闪退
  • Docker 在微服务架构中的应用(一)
  • HTML5 面试题
  • 程序员学英文之At the Hotel
  • Redis存储⑨Redis的持久化_RDB和AOF
  • 二、《重学设计模式》-UML类图