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随手笔记之标准类型内建函数
Dec 02 Python
python实现简单爬虫功能的示例
Oct 24 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
Python模块搜索路径代码详解
Jan 29 Python
python 输出上个月的月末日期实例
Apr 11 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
python实现多线程端口扫描
Aug 31 Python
基于Django实现日志记录报错信息
Dec 17 Python
图解Python中深浅copy(通俗易懂)
Sep 03 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
PHPThumb图片处理实例
2014/05/03 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
php 中phar包的使用教程详解
2018/10/26 PHP
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
JS解决移动web开发手机输入框弹出的问题
2017/03/31 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
webuploader分片上传的实现代码(前后端分离)
2018/09/10 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python中range()与xrange()用法分析
2016/09/21 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
行政前台岗位职责
2013/12/04 职场文书
文明村镇申报材料
2014/05/06 职场文书
护士节策划方案
2014/05/19 职场文书
大学生见习报告范文
2014/11/03 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
趣味运动会口号
2015/12/24 职场文书
Python生成九宫格图片的示例代码
2021/04/14 Python
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android