动态规划 - N步台阶问题
该文转载,因所看文章没有放原文链接,故找不到原文链接
题目分析
问题本质:斐波那契数列
令跳法为f(n),
如果n=1:{{1}},f(1)=1;
如果n=2:{{1,1},{2}},f(2)=2;
如果n=3,{{1,1,1},{1,2},{2,1}},f(3)=3;
如果n=6,有两种情况:1)目前在5阶,跳1步到6;2)目前在4阶,跳2步到6。即f(6)=f(5)+f(4);
... ...
如果有n阶(n>2),1)目前在n-1阶,跳1步到n;2)目前在n-2阶,跳2步到n。即f(n)=f(n-1)+f(n-2)。
实现
实现算法往往是简单的,及时是复杂算法也花费不了太多精力,所以将问题转换为数学问题是一种很好的选择。当前这种简单算法实现方式更为简单,而且往往不止一种方式。
递归
public static int f(int n){if(n<=2) return n;int x = f(n-1)+f(n-2);return x;
}
优点:可能是最好理解的算法了把。代码简单,好理解。
缺点:计算次数颇多,有很多冗余计算。
迭代
public static int f(int n){if(n<=2) return n;if first=1,second=2;int third=0;for(int i=3;i<=n;i++){third = first+second;first = second;second = third;}return third;
}
优点: 基本没有冗余计算,效率高
缺点: 谁能一次读完就理解的?
动态规划
原文:动态规划是解决下面这些性质类问题的技术:
1. 一个问题可以通过更小子问题的解决方法来解决(译者注:即问题的最优解 包含了其子问题的最优解,也就是最优子结构性质)。
2. 有些子问题的解可能需要计算多次(译者注:也就是子问题重叠性质)。
3. 子问题的解存储在一张表格里,这样每个子问题只用计算一次。
4. 需要额外的空间以节省时间。
public static int[] A = new int[100];
public static int f(int n){if(n<=2){A[n] = n;}if(A[n]>0){return A[n];} else {A[n] = f(n-1)+f(n-2);return A[n];}
}
虽然没弄懂为啥叫动态规划,但是代码还是很清晰的。
优点:已经计算过的结果就不需要再次计算了。空间换时间
缺点:需要额外的开销。
问题:
例:公司招20名员工,每天招1个或者2个,问有多少种招法?
动态规划 - N步台阶问题相关推荐
- 算法! 有n步台阶,一次只能上1步或2步,共有多少种走法
有2种算法, 递归和循环迭代, 依次介绍并比较 1.递归 1步台阶, 一种走法, 即f(1)=1; 2步台阶, 2种走法, 一步加一步或是直接跨两步, 即f(2)=2 3步台阶, 最后一次要么跨1步, ...
- 编程题-有n步台阶一次只能上1步或2步共有多少种走法
问题: 有n步台阶,一次只能上1步或2步,请共有多少种走法,请使用编程实现. 编程题实现: 方法1-递归 //实现f(n):求n步台阶,一共有几种走法public int f(int n){if(n& ...
- 台阶的意思_正屋大门前几步台阶好 二步台阶进屋的含义 三步台阶进屋的含义...
在古时候,人们在建的房子门口都会设立台阶,不仅能够防止外面的尘土吹进屋内,而且也有步步高升的美好寓意,但是台阶的步数也是很有讲究的,那么正屋大门前几步台阶好?下面为大家介绍二步台阶进屋的含义,以及三步 ...
- 【有n步台阶,一次只能上1步或2步,共有多少种走法?】
1.递归 public static int f(int n){if (n < 1){throw new IllegalArgumentException(n + "不能小于1&quo ...
- 有N步台阶,每次可以走1步或者2步,计算有多少种走法
假如台阶为1 有一种走法 f(1)=1 假如台阶有2 有1+1,2 这两种走法 1步+1步 =2种 f(2)=2 假如台阶有3 有1+1+1 ,1+2 ,2+1 这三种走法 就是f(3)= f(1) ...
- 动态规划-青蛙跳台阶
一只青蛙,一次只能跳一级台阶,或者跳两级台阶. 问:这只青蛙跳上n级台阶有多少种跳法. 跳法非常多: 一级一级跳,一级两级跳,两级一级,两级两级的跳-普通逻辑弄不明白. 动态规划思想: 如果这只青蛙, ...
- 有n步台阶,一次只能上1步或2步,共有多少种走法?
根据分析这就是 --> 斐波那契数列 1 2 3 5 8 13 - 1.递归 public int x(int n) {if(n==1 || n==2) {return n;}return x( ...
- Python 爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?
Python爬楼梯问题:有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法? 总共n步台阶(先假设n>3),f(n)表示n步台阶的走法总数 1.第一步如果是只走1步台阶,剩下的 ...
- python爬楼梯多少种_Python 爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法?...
Python爬楼梯问题:有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法? 总共n步台阶(先假设n>3),f(n)表示n步台阶的走法总数 1.第一步如果是只走1步台阶,剩下的 ...
最新文章
- 探索初级算法学习笔记-快速排序法
- 飘逸的python - hack输出流便于调试
- 程序员会写诗是怎样的体验
- curl and wget
- java成神之——集合框架之ArrayList,Lists,Sets
- vb.net 教程 3-8 窗体编程 容器 3 SplitContainer
- 四 树莓派系统配置及进入图形桌面
- mac 远程连接 Windows 桌面
- Systick中断延时
- #ifndef的详细意思
- 无死角窥探的焦虑:AI如何反击隐私侵占?
- Python中文gbk编码输出报错
- 美图手机sim卡显示无服务器,美图手机卡顿怎么解决
- 原来,“空三加密”竟是加了这些“密”!
- 展锐5G芯片强势崛起,为千行百业实现智慧化转型
- 傻瓜式Ubuntu20.04显卡驱动安装
- 你想告诉准程序员些什么?
- 使用LitePal操作数据库
- C语言小练习-酒店预订
- 2022天梯赛正式赛(附天梯赛题目链接)
热门文章
- 实时数仓到底是什么呢?与传统数仓有什么区别?
- Field ‘gmt_create‘ doesn‘t have a default value; nested exception is java.sql.SQLException: Field ‘g
- 关于wifi portal认证--为浏览器添加wifi认证功能
- 变量值互换自定义函数swap()的使用
- VS解决BEX错误但无法关闭DEP保护的问题
- mysql之sql语句优化
- 俄勒冈大学计算机科学专业,2020年俄勒冈大学排名TFE Times美国最佳计算机科学硕士专业排名第68...
- 年轻代、年老代和持久代
- 《MySQL安装流程详解》及《MySQL安装一直失败,重新安装显示已安装》
- 2020研究生数学建模E题--AlexNet深度网络解法(大雾能见度估计与预测)(含代码)