python动态规划算法实例详解

 更新时间:2020年11月22日 11:03:19   作者:十一  
在本篇文章里小编给大家整理了关于python动态规划算法实例内容,有需要的朋友们可以参考学习下。

如果大家对这个生僻的术语不理解的话,那就先听小编给大家说个现实生活中的实际案例吧,虽然现在手机是相当的便捷,还可以付款,但是最初的时候,我们经常会使用硬币,其中,我们如果遇到手中有很多五毛或者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动态规划算法是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章讲解用VScode写Python怎么运行

    一篇文章讲解用VScode写Python怎么运行

    这篇文章主要介绍了如何在Visual Studio Code(VSCode)中编写和运行Python代码,包括安装VSCode、安装Python插件、配置Python环境、创建和运行Python文件、调试Python代码、代码格式化、代码片段、Git集成以及单元测试等,需要的朋友可以参考下
    2024-12-12
  • SQLAlchemy的主要组件详细讲解

    SQLAlchemy的主要组件详细讲解

    SQLAlchemy是一个基于Python实现的ORM框架,能满足大多数数据库操作需求,同时支持多种数据库引擎(SQLite,MySQL,Postgresql,Oracle等),这篇文章主要介绍了SQLAlchemy的主要组件有哪些,本文给大家介绍的非常详细,对大家的学习具有一定的参考借鉴价值,需要的朋友可以参考
    2023-08-08
  • pytorch SENet实现案例

    pytorch SENet实现案例

    这篇文章主要介绍了pytorch SENet实现案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python实现清除文件夹中重复视频

    Python实现清除文件夹中重复视频

    本文将利用Python中的os、hashlib、shutil模块实现对文件夹中的重复视频进行清除,实现文件夹中无重复文件情况发生,需要的可以参考一下
    2022-05-05
  • windows下python使用ffmpeg实现rtsp推流

    windows下python使用ffmpeg实现rtsp推流

    这篇文章主要为大家详细介绍了在windows环境下python如何使用ffmpeg实现rtsp推流,文中的示例代码讲解详细,有需要的小伙伴可以了解一下
    2023-09-09
  • 在RedHat系Linux上部署Python的Celery框架的教程

    在RedHat系Linux上部署Python的Celery框架的教程

    这篇文章主要介绍了在RedHat系Linux上部署Python的Celery框架的教程, Celery是一个并行分布框架,拥有良好的I/O性能,需要的朋友可以参考下
    2015-04-04
  • Python图像处理PIL各模块详细介绍(推荐)

    Python图像处理PIL各模块详细介绍(推荐)

    这篇文章主要介绍了Python图像处理PIL各模块详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python进阶学习实时目标跟踪示例详解

    python进阶学习实时目标跟踪示例详解

    这篇文章主要为大家介绍了python进阶学习实时目标跟踪示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 经验丰富程序员才知道的8种高级Python技巧

    经验丰富程序员才知道的8种高级Python技巧

    这篇文章主要介绍了经验丰富程序员才知道的8种高级Python技巧,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 使用Pytorch训练分类问题时,分类准确率的计算方式

    使用Pytorch训练分类问题时,分类准确率的计算方式

    这篇文章主要介绍了使用Pytorch训练分类问题时,分类准确率的计算方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论