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进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
Python字典及字典基本操作方法详解
Jan 30 Python
对python:print打印时加u的含义详解
Dec 15 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
Python 仅获取响应头, 不获取实体的实例
Aug 21 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Python shutil模块用法实例分析
Oct 02 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
基于python调用psutil模块过程解析
Dec 20 Python
在pycharm中实现删除bookmark
Feb 14 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
python 利用toapi库自动生成api
Oct 19 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单件模式结合命令链模式使用说明
2008/09/07 PHP
php 分页函数multi() discuz
2009/06/21 PHP
教你如何使用php session
2013/10/28 PHP
PHP附件下载中文名称乱码的解决方法
2015/12/17 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
用Node编写RESTful API接口的示例代码
2018/07/04 Javascript
教你如何用Node实现API的转发(某音乐)
2019/09/20 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
python类参数self使用示例
2014/02/17 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
2019/06/03 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python批量修改文件名的示例
2020/09/27 Python
物流司机岗位职责
2013/12/28 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
毕业晚会主持词
2014/03/24 职场文书
餐厅筹备计划书
2014/04/25 职场文书
竞争与合作演讲稿
2014/05/12 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
烈士陵园观后感
2015/06/08 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
四十九个javascript小知识实用技巧
2021/11/20 Javascript