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中的字典容器
Apr 14 Python
Python 探针的实现原理
Apr 23 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
pycharm远程调试openstack代码
Nov 21 Python
python实现接口并发测试脚本
Jun 25 Python
python cumsum函数的具体使用
Jul 29 Python
详解Python绘图Turtle库
Oct 12 Python
Python日志syslog使用原理详解
Feb 18 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
Python特殊属性property原理及使用方法解析
Oct 09 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 28 Python
Python环境搭建过程从安装到Hello World
Feb 05 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/03/24 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
vue实现购物车案例
2020/05/30 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
详解常用查找数据结构及算法(Python实现)
2016/12/09 Python
python实现音乐下载的统计
2018/06/20 Python
wxpython绘制圆角窗体
2019/11/18 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
接受捐赠答谢词
2014/01/27 职场文书
三查三看党性分析材料
2014/02/18 职场文书
产品质量承诺书
2014/03/27 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
js判断两个数组相等的5种方法
2022/05/06 Javascript