搜索

搜索算法是对状态空间进行枚举的方法,通过穷尽所有可能来找到最优解或统计合法解的个数。搜索是许多高级算法的基础,也是获取部分分数的重要手段。

章节目录

基础搜索

专题说明特点
DFS深度优先搜索递归实现、空间占用小
BFS广度优先搜索队列实现、找最短路径
双向搜索从两端同时搜索减少搜索空间

进阶搜索

专题说明适用场景
启发式搜索利用估价函数引导搜索大状态空间问题
A* 算法最优路径搜索带权图最短路
迭代加深逐步增加深度限制解深度未知时
IDA*迭代加深 + A*内存受限时的最优搜索

搜索技巧

专题说明
回溯法试探与回退的搜索框架
[Dancing Links](https://leetcode.com/problems/Dancing Links/)精确覆盖问题的高效算法
[Alpha-Beta 剪枝](https://leetcode.com/problems/Alpha–Beta 剪枝/)博弈树搜索优化
搜索优化剪枝、记忆化等技巧

搜索算法对比

算法完备性最优性时间复杂度空间复杂度
DFS有限图完备
BFS完备单位代价最优
迭代加深完备单位代价最优
A*完备最优(一致启发式)指数级指数级
IDA*完备最优指数级

其中 为分支因子, 为解的深度, 为最大深度

搜索优化策略

flowchart TD
    A[搜索优化] --> B[减小搜索空间]
    A --> C[改变搜索顺序]
    A --> D[剪枝策略]
    
    B --> B1[状态压缩]
    B --> B2[等价状态合并]
    
    C --> C1[最优性剪枝]
    C --> C2[启发式排序]
    
    D --> D1[可行性剪枝]
    D --> D2[最优性剪枝]
    D --> D3[记忆化]

习题推荐