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文件和目录操作详解
Feb 08 Python
python中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python实现给qq邮箱发送邮件的方法
May 28 Python
详解Django框架中用户的登录和退出的实现
Jul 23 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
python中hashlib模块用法示例
Oct 30 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python的垃圾回收机制详解
Aug 28 Python
Python OrderedDict的使用案例解析
Oct 25 Python
详解Python调用系统命令的六种方法
Jan 28 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
javascript实现简易数码时钟
2020/03/30 Javascript
JavaScript实现无限轮播效果
2020/11/19 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
python版本坑:md5例子(python2与python3中md5区别)
2017/06/20 Python
人机交互程序 python实现人机对话
2017/11/14 Python
pandas string转dataframe的方法
2018/04/11 Python
详解Python if-elif-else知识点
2018/06/11 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
2019/04/17 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
2013/06/09 HTML / CSS
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
网络安全类面试题
2015/08/01 面试题
银行介绍信范文
2014/01/10 职场文书
市场营销个人求职信范文
2014/02/02 职场文书
现金出纳岗位职责
2014/03/15 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏