问题描述
所以我一直在 youtube 上学习动态规划,这里是链接 https://www.youtube.com/watch?v=oBt53YbR9Kk&t=4257s,我在网格旅行者递归部分学习。但我仍然对时间复杂度感到困惑。
例如这个网格旅行者递归方法:
int gridTraveler(int m,int n) {
if (m == 0 || n == 0) {
return 0;
}
if (m == 1 || n == 1) {
return 1;
}
return gridTraveler(m - 1,n) + gridTraveler(m,n - 1);
}
为什么时间复杂度是 O(2^(m+n))?使用递推关系有什么解释吗?
还有这个带有记忆方法的网格旅行者递归:
Map<String,int> memo = {};
int gridTraveler(int m,int n) {
if (m == 0 || n == 0) {
return 0;
}
if (m == 1 && n == 1) {
return 1;
}
if (memo.containsKey('${m},${n}')) {
return memo['${m},${n}'] as int;
}
if (memo.containsKey('${n},${m}')) {
return memo['${n},${m}'] as int;
}
memo['${m},${n}'] = gridTraveler(m - 1,n - 1);
return memo['${m},${n}'] as int;
}
为什么时间复杂度是 O(m*n)?使用递推关系有什么解释吗?