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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
快速入手Python字符编码
Aug 03 Python
python 读写中文json的实例详解
Oct 29 Python
python让列表倒序输出的实例
Jun 25 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
python/golang 删除链表中的元素
Sep 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
mongodb和php的用法详解
2019/03/25 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
javascript常用函数归纳整理
2014/10/31 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python中apply函数的用法实例教程
2014/07/31 Python
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
使用Python的内建模块collections的教程
2015/04/28 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
解决python删除文件的权限错误问题
2018/04/24 Python
python django model联合主键的例子
2019/08/06 Python
Python reques接口测试框架实现代码
2020/07/28 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
司马光教学反思
2014/02/01 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
珍惜资源的建议书
2014/08/26 职场文书
典型事迹材料范文
2014/12/29 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
基于Redis延迟队列的实现代码
2021/05/13 Redis
python单元测试之pytest的使用
2021/06/07 Python