动态规划算法

选自知乎https://www.zhihu.com/question/39948290
能用动态规划解决的问题:
1.问题的答案依赖于问题的规模,也就是问题的所有答案构成了一个数列。
应用动态规划:将问题拆分成三个子目标
在这里插入图片描述
目标中有两个是涉及到代码层面上:
· 缓存中间结果,搞个数组等变量记录中间结果。
· 按顺序从小到大算,搞个for循环一次计算。

例子1-3:斐波那契数列(简单)
在这里插入图片描述
首先,我们可以很容易得到状态转移方程:​ [公式]
接下来我们用两种方法来做:
法一:简单递归
在这里插入图片描述
代码简单易懂,然而这代码却极其低效。空间复杂度高,时间复杂度更是高到在这里插入图片描述
法二:动态规划
在这里插入图片描述
java:一定要注意索引是从0开始的。需要求第n个值,就是求res[n-1]初始化的时候还是n个数字。

public int fib(int n){
	int[] res = new int[n];
	for (int i=0;i<n;i++) {
		if (i<2){
			res[i] = i;
		}else {
			res[i] = res[i-1]+res[i-2];
		}
	}
	return res[n-1];
}

例2-3:不同路径(难度:中等)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
java:

public int uniquePaths(int m, int n){
	int[][] res = new int[m][n];
	//res[1][0] = res[0][1] = 1;
	for (int i=0;i<m;i++) {
		for (int j=0;j<n;j++) {
			if (i==0 || j==0)
				res[m][n] = 1;
			else
				res[m][n] = res[m-1][n] + res[m][n-1];
		}
	}
	return res[m-1][n-1];
	}

例题3-3:正则表达式匹配(困难)(待学习!!)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值