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使用htpasswd实现基本认证授权的例子
Jun 10 Python
Python中的choice()方法使用详解
May 15 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python变量和数据类型详解
Feb 15 Python
python文本数据相似度的度量
Mar 12 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
python 解决微分方程的操作(数值解法)
May 26 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下常用正则表达式整理
2010/10/26 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
实例讲解React 组件
2020/07/07 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
Python实现购物车购物小程序
2018/04/18 Python
Sanic框架应用部署方法详解
2018/07/18 Python
python实现图片彩色转化为素描
2019/01/15 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
pandas的相关系数与协方差实例
2019/12/27 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
邮政员工辞职信
2014/01/16 职场文书
美术指导求职信
2014/03/17 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
全国文明单位申报材料
2014/05/31 职场文书
综艺节目策划方案
2014/06/13 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
openstack云计算keystone组件工作介绍
2022/04/20 Servers