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常见文件操作的函数示例代码
Nov 15 Python
简单的Python抓taobao图片爬虫
Oct 26 Python
Python实现身份证号码解析
Sep 01 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
Python 高级专用类方法的实例详解
Sep 11 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
selenium+python设置爬虫代理IP的方法
Nov 29 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
Dec 17 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
Pandas搭配lambda组合使用详解
Jan 22 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
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
Laravel中任务调度console使用方法小结
2017/05/07 PHP
自己的js工具_Form 封装
2009/08/21 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
jQuery1.9.1针对checkbox的调整方法(prop)
2014/05/01 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
原生JavaScript实现日历功能代码实例(无引用Jq)
2019/09/23 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
介绍Python中的文档测试模块
2015/04/28 Python
深入解析Python中的上下文管理器
2016/06/28 Python
Python工程师面试必备25条知识点
2018/01/17 Python
Python函数参数操作详解
2018/08/03 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python面向对象之Web静态服务器
2019/09/03 Python
python实现简易学生信息管理系统
2020/04/05 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
python 弧度与角度互转实例
2020/04/15 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
2020/08/05 Python
python实现视频压缩功能
2020/12/18 Python
关于Java String的一道面试题
2013/09/29 面试题
问卷调查计划书
2014/01/10 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
遗嘱格式范本
2015/08/07 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python