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实现给字典添加条目的方法
Sep 25 Python
python抽象基类用法实例分析
Jun 04 Python
对python3 urllib包与http包的使用详解
May 10 Python
python直接获取API传递回来的参数方法
Dec 17 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
Django基础三之视图函数的使用方法
Jul 18 Python
Pandas 缺失数据处理的实现
Nov 04 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
浅谈Keras中shuffle和validation_split的顺序
Jun 19 Python
浅谈Python中的继承
Jun 19 Python
Python pickle模块常用方法代码实例
Oct 10 Python
python 爬取天气网卫星图片
Jun 07 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 simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
PHP生成Flash动画的实现代码
2010/03/12 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
2013/06/03 PHP
关于使用coreseek并为其做分页的介绍
2013/06/21 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
python字典序问题实例
2014/09/26 Python
Python模拟登录12306的方法
2014/12/30 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
Python实现PS滤镜的旋转模糊功能示例
2018/01/20 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
python构建基础的爬虫教学
2018/12/23 Python
pandas.read_csv参数详解(小结)
2019/06/21 Python
Python3将数据保存为txt文件的方法
2019/09/12 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
超实用的 30 段 Python 案例
2019/10/10 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
英国汽车和货车租赁网站:Hertz英国
2016/09/02 全球购物
爱之链教学反思
2014/04/30 职场文书
农业开发项目建议书
2014/05/16 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
vue动态绑定style样式
2022/04/20 Vue.js