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 01 Python
python PyTorch预训练示例
Feb 11 Python
Window10+Python3.5安装opencv的教程推荐
Apr 02 Python
transform python环境快速配置方法
Sep 27 Python
Python可迭代对象操作示例
May 07 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python基于Selenium的web自动化框架
Jul 14 Python
pandas如何处理缺失值
Jul 31 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
Python内置异常类型全面汇总
May 28 Python
python爬取天气数据的实例详解
Nov 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
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
jquery ajax请求实例深入解析
2012/11/26 Javascript
JS交换变量的方法
2015/01/21 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
原生js开发的日历插件
2017/02/04 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
Js利用正则表达式去除字符串的中括号
2020/11/23 Javascript
详谈Python基础之内置函数和递归
2017/06/21 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Django 自定义分页器的实现代码
2019/11/24 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
Python读取yaml文件的详细教程
2020/07/21 Python
Python实现自动签到脚本的示例代码
2020/08/19 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
视图的作用
2014/12/19 面试题
办理生育手续介绍信
2014/01/14 职场文书
2014年团委工作总结
2014/11/13 职场文书
检讨书范文
2019/04/16 职场文书