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 10 Python
python网络编程之文件下载实例分析
May 20 Python
Python删除windows垃圾文件的方法
Jul 14 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
详解python中的json和字典dict
Jun 22 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
python flask搭建web应用教程
Nov 19 Python
Django Serializer HiddenField隐藏字段实例
Mar 31 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
python-for x in range的用法(注意要点、细节)
May 10 Python
python缺失值的解决方法总结
Jun 09 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
js计算精度问题小结
2013/04/22 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
Python入门篇之正则表达式
2014/10/20 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python修改txt文件中的某一项方法
2018/12/29 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
python如何从键盘获取输入实例
2020/06/18 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
优秀教师演讲稿
2014/05/06 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
前台接待员岗位职责
2015/04/15 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
让文件路径提取变得更简单的Python Path库
2021/05/27 Python
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android