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操作Access数据库基本步骤分析
Sep 19 Python
Python常用库推荐
Dec 04 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
python常用库之NumPy和sklearn入门
Jul 11 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
Python实现查找数据库最接近的数据
Jun 08 Python
keras中的History对象用法
Jun 19 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
python爬取豆瓣电影排行榜(requests)的示例代码
Feb 18 Python
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 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写MySQL数据 实现代码
2009/06/15 PHP
php修改时间格式的代码
2011/05/29 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
JavaScript indexOf方法入门实例(计算指定字符在字符串中首次出现的位置)
2014/10/17 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
2015/08/21 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
2017/05/12 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
浅析Python中字符串的intern机制
2020/10/03 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
学生实习推荐信范文
2013/11/26 职场文书
七年级历史教学反思
2014/02/05 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
村干部培训班主持词
2014/03/28 职场文书