记忆化搜索和剪枝

 两种都是优化搜索的方法

记忆化搜索:

属于动态规划的一种实现方式

记忆化搜索主要用于递归中,是优化递归搜索的重要方法

记忆化搜索就是将每次处理的结果储存起来,不让其重复计算

比如斐波那契数列:

int fbnq(int e)
{
    if(e == 1 || e == 2) return 1;
    else return fbnq(e-1) + fbnq(e-2);
}

其中在计算一个超级大数位的斐波那契数时,会重复计算很多次其他的数

比如当计算10时

首先会计算9,8;而计算9又需要计算8,7;

其中8被计算了两次,如果有一个数组记录其结果,就只需要计算一次就可以了

unordered_map<int,int> m;
int fbnq(int e)
{
    if(e == 1 || e == 2) return 1;
    if(m.find(e) == m.end()) m[e] = fbnq(e-1) + fbnq(e-2);
    return m[e];
}

 经过unordered_map优化后显然更迅速

剪枝优化:

剪枝是优化搜索的重要方法

就是在搜索中及时止损,以防不必要的计算。

剪枝主要分为可行性剪枝最优化剪枝

可行性剪枝:是指在搜索过程中判断路径是否能产生结果,如果不能就直接结束

最优化剪枝:是指判断该路径是否能比当前最优路线更优,如果不能就结束

总的来说:剪枝就是增加一定条件(可行性,最优化)来让程序提前结束,以降低时间复杂度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值