Skip to content

迭代加深 ​

  • 适用于问题递归的深度很深,但是答案深度可能很浅的情况,可以有效减少无效的搜索(即广搜空间不够,而且要找最优解时)
  • 每次设置一个深度,超过深度则不搜
  • 与宽搜区别:假设递归为多叉树,最小为二叉树,宽搜的空间复杂度会到达$ O(2^n) ,而迭代加深为,而迭代加深为 O(h) $
  • 每次加深重新搜不影响复杂度原因:20+21+22+2h−1=2h−12^0+2^1+2^2+2^{h-1}=2^h-1 ,而第 $ h $ 层有 $ 2^h $ 个节点,因此不影响
cpp
bool dfs(int u,int dep);
void solve(){
    int depth=1;
    while(!dfs(u,depth))depth++;
}