搜索算法简述
分类
- 扩展阅读:蒙特卡洛树搜索最通俗入门指南 - 知乎
回溯与DFS
递归树
此处所举例子:实现1~3全排列
- 最简单实现:三层循环+一个条件判断
- 高阶:回溯;vis[]数组
通用性模板:
1
2
3
4
5
6
7
8
9
10void dfs(){
if(){} //递归终止条件
if(){} //剪枝优化条件
for(){ //深搜
//状态标记
dfs()
//状态恢复:这里进行回溯,需要设置状态标记
}
}
A*
基础款介绍
伪码
- 启发式算法:
- 估值函数:
f(n)=g(n)+h(n)
,注意对启发部是有限制条件
- 估值函数:
1 | while(OPEN!=NULL) |
设计
open集与close集:
操作
$$open=\left{
\begin{matrix}
delete \
insert
\end{matrix}
\right.
$$会退化为Dijkstra:
增强款介绍
1.LPA
2.D*
- 相关阅读D* - Wikiwand
扩展阅读:D*
优化策略
剪枝:最优性剪枝
实际即为上下界限制的剪枝
- 剪枝策略本身包括:1. 可行性剪枝$\rightarrow$能否得到可行的解 2.最优性剪枝$\rightarrow$当前结点无法产生更优解时可提前回溯
算法知识扩展
启发式算法
最优化算法与启发式算法
- 扩展阅读:常见的几种最优化方法
算法收敛性与收敛速度
- 扩展阅读:浅谈算法收敛性与收敛速度
在线算法与离线算法
在线算法
可能不是最优解
Dijkstra相关证明
- 数学归纳+极限思想