01.00_搜索

搜索

深度优先搜索 (DFS)

深度优先搜索是一种优先走到最深的搜索算法。

特点

  1. 空间复杂度:,其中h为搜索树深度
  2. 时间复杂度:,其中b为分支因子,d为深度
  3. 适用于求解所有可能的解或最优解

分类

算法 问题描述 应用场景
普通DFS 无优化的深搜 排列、组合、子集
剪枝DFS 带优化的深搜 八皇后、数独、迷宫
记忆化DFS 状态记录的深搜 动态规划相关问题
双向DFS 从起点和终点同时搜索 最短路径、状态转换

广度优先搜索 (BFS)

广度优先搜索是一种层层推进的搜索算法。

特点

  1. 空间复杂度:,其中b为分支因子,d为深度
  2. 时间复杂度:
  3. 适用于求解最短路径或最少步数

分类

算法 问题描述 应用场景
普通BFS 无权图最短路 迷宫最短路、单词接龙
双向BFS 从起点和终点同时搜索 大规模状态空间搜索
启发式BFS 带评估函数的BFS A*算法、最优路径搜索
多源BFS 多个起点同时BFS 多源最短路、病毒传播

应用场景对比

DFS适合:

  1. 求解所有可能的解
  2. 内存空间受限
  3. 搜索树较深的情况

BFS适合:

  1. 求解最短路径
  2. 求解最少步数
  3. 层次遍历问题

选择建议

  1. 如果需要找到所有解,选择DFS
  2. 如果需要找最短路径,选择BFS
  3. 如果状态空间巨大,考虑使用剪枝或双向搜索
  4. 如果有明确的评估函数,考虑启发式搜索
牛客代码笔记-牛栋 文章被收录于专栏

汗牛充栋,学海无涯。<br/> 内含算法知识点讲解,以及牛客题库精选例题。<br/> 学习算法,从牛栋开始。

全部评论

相关推荐

程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务