迭代加深搜索算法
2021.5.9修改
深度优先搜索,从一个分支进行一个深入,直至碰到边界了才会回溯
这种算法肯定具有一些不足
如果我们的分支过多,而我们的节点所处的位置很浅的话,那么就白白浪费时间,在错误的分支上找不到答案
这个时候我们就可以对我们的搜索范围进行一个限制,如果当前限制找不到答案,就把深度限制增加,重新进行搜索,这就是迭代加深思想,所谓的迭代就是说渐渐逼近答案的意思
其实个人感觉和广搜差不多
也就是说,搜索树的规模随和层次的深入增长很快,我们还可以确定答案就在浅层上,就要实现迭代加深算法
也就是说,使用这个算法之前,我们必须自己 估算一下
其实这个算法就是用bfs实现dfs
只是之前所了解的简短的知识点,然后我们重新修改一下
其实迭代加深就是说在一次无法实现的情况下,使用重复(循环)来重复一段代码得到答案
个人理解的就是说用BFS来实现DFS
DFS耗时太大
BFS空间太大
那么我们可以使用的就是的迭代加深,DFS使用的是一搜到底,BFS是事情太多,那么使用迭代加深就是用来限制深度,它给了DFS一个限制,规定了层数然后在这个范围里面尽情的遨游
void iddfs(int k,...)
{
if(得到了合适的解)//边界
{
处理解
return;
}
if(k==0) return ;//类似于剪枝
for(int i=0;i<n;i++)
{
//处理节点
//继续搜索
iddfs(k-1,..)
//有些问题需要回溯
}
}
void depth()
{
for(int i=1;i<=100;i++)
{
iddfs(i,...);//枚举限制的层数
}
}
本文介绍了迭代加深搜索算法,它是深度优先搜索(DFS)的一种优化策略。当面临大量分支且答案可能在浅层时,DFS可能会浪费时间。迭代加深通过逐步增加搜索深度限制来避免这种情况,同时减少了空间需求,类似于使用宽度优先搜索(BFS)的特性。该算法在搜索树规模较大但答案位于浅层时尤其有效。在实际应用中,需要预估答案所在的深度范围,并通过循环调整深度限制来寻找解决方案。
7590

被折叠的 条评论
为什么被折叠?



