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动态规划算法是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现用户登录注册

    Python实现用户登录注册

    这篇文章主要为大家详细介绍了Python实现用户登录注册,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 详解pandas数据合并与重塑(pd.concat篇)

    详解pandas数据合并与重塑(pd.concat篇)

    这篇文章主要介绍了详解pandas数据合并与重塑(pd.concat篇),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 基于Python实现牛牛套圈小游戏的示例代码

    基于Python实现牛牛套圈小游戏的示例代码

    “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战!这篇文章小编主要为大家介绍一款基于Python实现牛牛套圈小游戏,感兴趣的小伙伴可以了解一下
    2023-02-02
  • python基于numpy的线性回归

    python基于numpy的线性回归

    这篇文章主要为大家详细介绍了python基于numpy的线性回归,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • pycharm永久激活方法

    pycharm永久激活方法

    这篇文章给大家介绍了pycharm永久激活码,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,对pycharm激活码相关知识感兴趣的朋友一起看看吧
    2020-01-01
  • Python 图像对比度增强的几种方法(小结)

    Python 图像对比度增强的几种方法(小结)

    这篇文章主要介绍了Python 图像对比度增强的几种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python入门教程(二十二)Python的类和对象

    Python入门教程(二十二)Python的类和对象

    这篇文章主要介绍了Python入门教程(二十二)Python的类和对象,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • citespace数据处理:用python对Ref文档进行去重方式

    citespace数据处理:用python对Ref文档进行去重方式

    这篇文章主要介绍了citespace数据处理:用python对Ref文档进行去重方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • keras做CNN的训练误差loss的下降操作

    keras做CNN的训练误差loss的下降操作

    这篇文章主要介绍了keras做CNN的训练误差loss的下降操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python小巧而强大的网络爬虫工具Grab轻松抓取站点信息

    python小巧而强大的网络爬虫工具Grab轻松抓取站点信息

    Grab 是一个强大的 python 网络爬虫框架,由 Greg Lavr 开发,它能够让你轻松地从互联网上抓取所需的信息,Grab 基于 pycurl[1],是性能十分优越的一个 HTTP 客户端,由于采用了异步网络 I/O 模型,Grab 甚至可以并行处理数千个网络连接
    2024-01-01

最新评论