迭代加深搜索:它是递归的吗?

时间:2013-11-07 07:34:12

标签: search iterative-deepening

我在互联网上搜索了IDS算法,我一直在寻找一些例子,但它们都是递归的,而且我理解迭代不是递归的。 那么请你给我一些IDS算法的例子吗?(实现会很好,没有递归)

提前致谢!你将是一个救生员!

2 个答案:

答案 0 :(得分:1)

迭代部分不是递归的:在顶部它或多或少:

int limit = 0;
Solution sol;
do {
    limit++;
    sol = search(problem,limit);
} while(sol == null);
//do something with the solution.

这就是说,在大多数情况下,搜索解决方案确实是递归实现的:

Solution search(Problem problem, int limit) {
    return search(problem,0,limit);
}
Solution search (Problem problem, int price, int limit) {
    if(problem.solved) {
        return problem.getSolution();
    }
    for(int value = 0; value < valuerange; value++) {
        problem.assignVariable(value);
        int newprice = price + problem.price();
        if(price < limit) {
            Solution solution = search(problem,newprice,limit);
            if(s != null) {
                return solution;
            }
        }
        problem.backtrackVariable();
    }
    return null;
}

但是存在一个将任何递归程序转换为非递归程序的自动过程。

答案 1 :(得分:-1)

如果您从算法的角度(不仅仅是实现)考虑,这意味着在搜索树的所有节点上而不是仅在根节点上应用迭代。

对于国际象棋程序,这确实有一些好处。即使在以后包含先前由alpha-beta修剪的分支的情况下,它也可以改善移动顺序。使用换位表可以使额外搜索的成本保持较低水平。

https://www.chessprogramming.org/Internal_Iterative_Deepening