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实现的Google IP 可用性检测脚本
Apr 23 Python
在Python中使用lambda高效操作列表的教程
Apr 24 Python
PyQt5每天必学之QSplitter实现窗口分隔
Apr 19 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
python跳出双层for循环的解决方法
Jun 24 Python
Python中zip()函数的简单用法举例
Sep 02 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
python中with用法讲解
Feb 07 Python
Python json格式化打印实现过程解析
Jul 21 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
python使用cPickle模块序列化实例
2014/09/25 Python
Python利用递归和walk()遍历目录文件的方法示例
2017/07/14 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
python实现TF-IDF算法解析
2018/01/02 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
Django实现随机图形验证码的示例
2020/10/15 Python
python安装及变量名介绍详解
2020/12/12 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
期末自我鉴定
2014/02/02 职场文书
区优秀教师事迹材料
2014/02/10 职场文书
毕业晚会主持词
2014/03/24 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2014年班务工作总结
2014/12/02 职场文书
心理学培训心得体会
2016/01/22 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby