0x22 深度优先搜索

0x22 深度优先搜索

深度优先搜索(DFSDepth First Search),顾名思义,就是按照深度优先的顺序对"问题状态空间"进行搜索的算法。在0x00章中,我们多次把一个问题的求解看做对问题状态空间的遍历与映射。从本章起,我们可以进一步把"问题空间"类比成为一张图,其中的状态类比为节点,状态之间的联系与可达性就用图中的边来表示,那么使用深度优先搜索算法求解问题,就相当于在一张图上进行深度优先遍历。

深度优先搜索与"递归"和"栈"密切相关。我们倾向于认为"递归"是与递推相对的一种单纯的遍历方式,除了搜索之外,还有许多算法都可以用递归实现。而"深搜"是一类包括遍历形式、状态记录与检索、剪枝优化等算法整体设计的统称。

在研究深度优先搜索算法之前,我们先来定义该过程产生的"搜索树 "结构。在对图进行深度优先遍历处于 x x x点,对于某些边 ( x , y ) (x,y) (x,y), y y y是一个尚未访问过的节点,程序从 x x x成功进入了更深层的对 y y y的递归;对于另外一些边 ( x , y ) (x,y) (x,y), y y y已经被访问过,从而程序考虑其他分支。我们称所有点(问题空间中的状态)与成功发生递归的边(访问两个状态之间的移动)构成的树为一棵"搜索树"。整个深搜算法就是就基于该搜索树完成的------为了避免重复访问,我们对状态进行记录和检索;为了使程序更加高效,我们提前减除搜索树上不可能是答案的子树和分支,不去进行遍历。

我们在0x03节中使用递归实现的指数型、排列型和组合型枚举,其实就是深搜的三种简单的形式。与之相关的子集和问题、全排列问题、N皇后问题 等都是可以用深搜求解的经典NPC问题。

相关推荐
DashVector23 分钟前
通义深度搜索-上传文件
人工智能·深度学习·阿里云·ai·深度优先
龙山云仓23 分钟前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
夏鹏今天学习了吗31 分钟前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
芒克芒克1 小时前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计1 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
夜勤月1 小时前
彻底终结内存泄漏与悬挂指针:深度实战 C++ 智能指针底层原理与自定义内存池,打造稳如泰山的系统基石
开发语言·c++
Fcy6482 小时前
⽤哈希表封装unordered_map和unordered_set(C++模拟实现)
数据结构·c++·散列表
CSDN_RTKLIB2 小时前
右值引用一个误区
c++
丨康有为丨2 小时前
算法时间复杂度和空间复杂度
算法
HarmonLTS2 小时前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法