专栏文章

搜索进阶

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqll1o9
此快照首次捕获于
2025/12/04 06:47
3 个月前
此快照最后确认于
2025/12/04 06:47
3 个月前
查看原文

迭代加深

迭代加深,顾名思义,是一层一层向下搜,类似于BFS
BFS有什么缺点,那就是占空间,但在某些时候比DFS快
毕竟,如果DFS找错分支,而那个分支没有答案并且很深,就会耗费大量的时间
于是,我们想着,可以自小到大枚举深度进行DFS,这样既能保证,这些节点会一层一层搜到,加快寻找答案的速度,又不占空间

双向搜索

双向搜索是一种常见策略,一般用于优化枚举子集问题,主要适用于有主要初始状态与最终状态的时候
使用双向搜索可以避免层数过深时分支数量大规模增长的情况
方法如下,可以先搜索前半段,在搜索后半段,再对后半段产生的答案去匹配前半段产生最终答案

A*

AA∗算法是启发式搜索中的一种
它适用于一些最优解问题或kk优解问题
它可以用优先队列将保证从终点第xx次得到的一定是第xx优解
我们设一个函数f(x)f(x)是预估的价值总和,让优先队列里的状态以f(x)f(x)排序
设已算的价值为h(x)h(x),那我们需要预估剩下的价值 g(x)g(x)
f(x)=h(x)+g(x)f(x)=h(x)+g(x)
g(x)g(x)一般是最优解
我们需要使 f(x)ansf(x) \le ans
到终点时,f(x)=ansf(x)=ans,所以答案是能正确的
剩下的和广搜是一样的

IDA*

AA*的算法关键是在设计估价函数,将BFSBFS与估价函数结合形成了AA*,那么如果我们将DFS+迭代加深DFS+迭代加深和估价函数相结合就可以得到IDAIDA*

评论

0 条评论,欢迎与作者交流。

正在加载评论...