IDA*算法总结

IDA*算法在ACM竞赛中虽不常用,但因其功能强大、应用灵活,适合解决深度无限且宽度不可预知的问题。它基于迭代加深搜索,结合启发函数g(n)进行剪枝,确保找到深度最小的解。经典应用如埃及分数问题,利用IDA*求解字典序最小解。
摘要由CSDN通过智能技术生成

IDA*算法在ACM竞赛中运用的不多,但它功能强大、应用灵活,若运用得当,将会使得一些搜索题大大简化。


适用范围及基本原理:问题对应的解答树没有明显的深度限制,甚至每一层的宽度都是无限的,无法利用BFS或者DFS求解,此时可以用迭代加深搜索,从小到大枚举深度上限maxd进行搜索。而IDA*则是在其基础上加入启发函数g(n),g(n)代表从当前节点n至少还需要扩展多少层才有可能找到解,若当前n的深度为h(n),则可以利用maxd的深度限制进行解答树子树的剪枝,即当节点n满足h(n)+g(n)>maxd时,停止扩展以节点n为根的解答子树。因为在每一层都进行这样的估计预测,所以最终解的深度一定小于等于maxd。而maxd又是从小到大以此枚举的,所以最先找到的解一定是深度最小的解。

一般g(n)函数的选取依照最乐观的估计,如果最乐观的情况下深度都要超过maxd,则无论如何也要剪枝了。

一言以蔽之,IDA*是有深度下限限制的启发式的DFS。


经典题目:

1.埃及分数

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cassert>
using namespace std;

int a,b,maxd;
typedef long long LL;

LL gcd(LL a,LL b)
{
	return b==0?a:gcd(b,a%b);
}

i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值