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输出一个杨辉三角的例子
Jun 13 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
python SQLAlchemy的Mapping与Declarative详解
Jul 04 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
Python调用Windows命令打印文件
Feb 07 Python
python实现学生管理系统开发
Jul 24 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
python中如何对多变量连续赋值
Jun 03 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执行速度全攻略(下)
2006/10/09 PHP
sae使用smarty模板的方法
2013/12/17 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
ExtJs使用总结(非常详细)
2012/03/22 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
js实现上传图片并显示图片名称
2019/12/18 Javascript
原生javascript如何实现共享onload事件
2020/07/03 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
2014年民警工作总结
2014/11/25 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
严以用权学习心得体会
2016/01/12 职场文书
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫