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代码真的很爽
Aug 26 Python
python使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
Python使用正则表达式获取网页中所需要的信息
Jan 29 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
Python JSON编解码方式原理详解
Jan 20 Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 Python
Python新手如何理解循环加载模块
May 29 Python
python利用platform模块获取系统信息
Oct 09 Python
python 6种方法实现单例模式
Dec 15 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
Python基础知识之变量的详解
Apr 14 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_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
eclipse php wamp配置教程
2016/06/30 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
2019/04/11 PHP
我的javascript 函数链之演变
2011/04/07 Javascript
用JQuery实现表格隔行变色和突出显示当前行的代码
2012/02/10 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
2016/07/22 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
[58:00]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第二场 2月7日
2021/03/11 DOTA
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
python使用PyQt5的简单方法
2019/02/27 Python
python实现文件的备份流程详解
2019/06/18 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python 下划线的不同用法
2020/10/24 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
python openssl模块安装及用法
2020/12/06 Python
python wsgiref源码解析
2021/02/06 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
工程总经理工作职责
2013/12/09 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
拆迁委托协议书
2014/09/15 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
办公室个人总结
2015/02/28 职场文书
保研推荐信格式
2015/03/25 职场文书
加班费申请报告
2015/05/15 职场文书