IDA*搜索——迭代加深

首先放一道例题:

给出n个数,以及目标m,需要用这n个数中的若干个数加起来等于m,问所有方案中使用的数的数量最少的方案是什么。

显然,对于这道题,我们并不知道搜索的深度会是多少,如果放任程序像野狗一样满场子乱搜,那么肯定TLE无疑了。

由于需要记录答案,所以用广搜的话空间可能会炸。

于是,我们只能用深搜,为了不让程序这条野狗跑的太远,我们人为地做一条缰绳,让它只能在固定范围内移动,等它搜完这个范围之后,如果没有找到答案,再把缰绳伸长一些,继续找。

这就是——迭代加深搜索

在不知道搜索的深度的时候,我们就需要人为地控制深度,当设定深度为deep时如果没找到答案,我们就让deep+1,然后重新搜索一次。

虽然这样有一点点缺陷,也就是每次搜索deep+1时,会把深度为deep时遍历过的地方又遍历一次。但由于深搜的时间复杂度是随着深度成指数级增长的,所以重新遍历的这一点点根本不算什么。

回到上面那个例题,具体的做法已经很明显了,我们枚举每一次使用多少个数来相加,然后在此基础上跑深搜即可。

进阶

埃及分数    题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值