python动态规划算法实例详解


Posted in Python onNovember 22, 2020

如果大家对这个生僻的术语不理解的话,那就先听小编给大家说个现实生活中的实际案例吧,虽然现在手机是相当的便捷,还可以付款,但是最初的时候,我们经常会使用硬币,其中,我们如果遇到手中有很多五毛或者1块钱硬币,要怎么凑出来5元钱呢?这么一个过程也可以称之为动态规划算法,下面就来看下详细内容吧。

从斐波那契数列看动态规划

斐波那契数列Fn = Fn-1 + Fn-2 ( n = 1,2 fib(1) = fib(2) = 1)

练习:使用递归和非递归的方法来求解斐波那契数列的第 n 项

代码如下:

# _*_coding:utf-8_*_
def fibnacci(n):
  if n == 1 or n == 2:
    return 1
  else:
    return fibnacci(n - 1) + fibnacci(n - 2)
 print(fibnacci(10)) # 55

如果看不懂上面模棱两可的介绍,还有下面直观的代码:

f(1) = 1
f(2) = 1
f(3) = f(1) + f(2) = 1+ 1 = 2
f(4) = f(3) + f(2) = 2 + 1 = 3
...
f(n) = f(n-1) + f(n-2)

实例扩展:

爬楼梯

假设你正在爬楼梯,需要n阶才能到达楼顶
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
如:
示例1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1. 1 阶 + 1 阶
2. 2 阶
示例2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1. 1 阶 + 1 阶 + 1 阶
2. 1 阶 + 2 阶
3. 2 阶 + 1 阶

解析:

如果给的两个示例看的不是特别清楚,你可以当阶梯为0,那么上楼梯方法0种这是必然,当阶梯只有1那么上楼梯方法只有1种:
当4个台阶:
输入:4
输出:4
1. 1阶 + 1阶 + 1阶 + 1阶
2. 2阶 + 2阶
3. 1阶 + 2阶 + 1阶
4. 2阶 + 1阶 + 1阶
5. 1阶 + 1阶 + 2阶
那么得到:
阶梯数 爬楼梯方法
0 0
1 1
2 2
3 3
4 5
...
如果感觉看的不明显可以推理一下5阶,6阶...
可以得到当我们想爬n阶楼梯,我们可以得到: p(n-1) + p(n-2) p为爬楼梯方法

class Solution:
  def climbStairs(self, n: int) -> int:
    num_list = [0,1,2]
    if n==1:
      return num_list[1]
    elif n==2:
      return num_list[2]
    else:
      for i in range(3,n+1):
        num_list.append(num_list[i-1]+num_list[i-2])
    print(num_list)
    return num_list[n]

obj = Solution()
result = obj.climbStairs(10)
print(result)

提交LeetCode只击败了12.72%的人。通过优化

class Solution:
  def climbStairs(self, n: int) -> int:
    a,b,c = 0,1,2
    if n == 1:
      return b
    if n == 2:
      return c
    while n>0:
      c = a + b
      a,b = b,c
      n -= 1
    return c
obj = Solution()
result = obj.climbStairs(8)

到此这篇关于python动态规划算法实例详解的文章就介绍到这了,更多相关python动态规划算法是什么内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python批量同步web服务器代码核心程序
Sep 01 Python
对于Python的框架中一些会话程序的管理
Apr 20 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Python参数传递及收集机制原理解析
Jun 05 Python
Python turtle库的画笔控制说明
Jun 28 Python
python全栈开发语法总结
Nov 22 #Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 #Python
一篇文章教你用python画动态爱心表白
Nov 22 #Python
python中scrapy处理项目数据的实例分析
Nov 22 #Python
python eventlet绿化和patch原理
Nov 21 #Python
python 实用工具状态机transitions
Nov 21 #Python
python 实现表情识别
Nov 21 #Python
You might like
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
利用PHP制作简单的内容采集器的原理分析
2008/10/01 PHP
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
php读取csv数据保存到数组的方法
2015/01/03 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
9个JavaScript评级/投票插件
2010/01/18 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
JavaScript 语言基础知识点总结(思维导图)
2013/11/10 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
微信小程序的生命周期的详解
2017/10/19 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python matplotlib.pyplot.plot()参数用法
2020/04/14 Python
PyTorch的torch.cat用法
2020/06/28 Python
ASP.NET Core中的配置详解
2021/02/05 Python
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
为什么需要版本控制
2016/10/28 面试题
教职工代表大会主持词
2014/04/01 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
婚宴祝酒词大全
2015/08/10 职场文书