动态规划非递归设计思路

递归实现动态规划并不难,但是对于数据规模大的问题,也许会爆栈也说不定。对于递归实现动态规划,通常一般也可以使用非递归。但是需要一定分析

鲁迅说过: 大问题拆成小问题,小问题拆成更小的问题,小小问题拆成更小小问题,直到拆解为原子性问题(自定义的原子性问题即为不可拆分问题),然后解决。

鲁迅说的有道理,我也觉得,但问题是,得先从小规模问题来处理解决,然后再处理次大问题,发现这很符合递归在实现动态规划的逻辑看伪代码:

def  dfs(int l,int r):   
	 mid=(l+r)/2
	 dfs(l,mid)  //被拆成了更小子问题
	 dfs(mid+1,r)
	 //处理逻辑省略...

在这里插入图片描述

也就是说在用for遍历,而并不是函数递归时,可以控制好l和r,让小范围的问题先处理,再处理大一点规模问题。
比如并不是所有的问题都可以这样设计,根据题目而定

for(int i=n-1;i>=0;i--){
		for(int j=i+1;j<n;j++){
			//处理i,j区间的问题
			}
			}

这样在处理i,j区间问题时,该区间里的所有子问题都被处理了。

鲁迅:我没说锅!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值