迭代加深搜索

1、含义

迭代加深搜索是一种每次限制搜索深度的深度优先搜索。

2、例题

整数变换问题
刚开始看到最少变换次数,果断选择BFS,结果MLE。

Q1:为什么使用BFS会爆内存?
①搜索树过深或者过宽;②BFS的实现基础是队列,队列的空间复杂度很大。

Q2:有何替代解决方法?
①时间换空间:使用迭代加深搜索求解问题。

//AC代码
#include<bits/stdc++.h>
using namespace std;

int x, m, dep;
string ans;

bool dfs(int d, int n){
    if(d > dep) return false;
    if(n == m) return true;
    if(dfs(d + 1, n * 3)){
        ans += "f";
        return true;
    }
    if(dfs(d + 1,n / 2)){
        ans += "g";
        return true;
    }  
    return false;
}

signed main(){
    cin >> x >> m;
    dep = 1;
    while(!dfs(0, x)) dep ++;
    cout << ans.size() << endl;
    cout << ans;
    return 0;
}

3、迭代加深搜索

  • 当搜索树的分枝较多时,≈BFS
  • 使用:
    • 寻求最优解,确定最优解在某一深度
  • 缺点:比较慢
//伪代码
IDDFS(u,d)
    if d>limit //limit为给定深度,d为当前深度
        return
    else
        for each edge (u,v) //找到答案,不需要更新limit;否则继续增大limit
            IDDFS(v,d+1)
return
posted @ 2023-02-20 19:18  风归去  阅读(132)  评论(0编辑  收藏  举报