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获取赶集网招聘信息前篇
Apr 18 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
python3中获取文件当前绝对路径的两种方法
Apr 26 Python
python中scikit-learn机器代码实例
Aug 05 Python
Django model select的多种用法详解
Jul 16 Python
由面试题加深对Django的认识理解
Jul 19 Python
Python列表list常用内建函数实例小结
Oct 22 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
python 如何执行控制台命令与操作剪切板
May 20 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
mysql总结之explain
2012/02/27 PHP
单台服务器的PHP进程之间实现共享内存的方法
2014/06/13 PHP
php jsonp单引号转义
2014/11/23 PHP
php+html5使用FormData对象提交表单及上传图片的方法
2015/02/11 PHP
PPK 谈 JavaScript 的 this 关键字 [翻译]
2009/09/29 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
基于jquery的获取mouse坐标插件的实现代码
2010/04/01 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
nodeJs爬虫获取数据简单实现代码
2016/03/29 NodeJs
jQuery滚动新闻实现代码
2016/06/26 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
微信小程序新手教程之页面打开数量限制
2019/03/03 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python 将字符串转换成字典dict
2013/03/24 Python
linux 下实现python多版本安装实践
2014/11/18 Python
Python抽象类的新写法
2015/06/18 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
党校自我鉴定范文
2013/10/02 职场文书
党员干部廉洁承诺书
2014/05/28 职场文书
市场调查策划方案
2014/06/10 职场文书
中国梦团日活动总结
2014/07/07 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB