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 相关文章推荐
python3使用urllib示例取googletranslate(谷歌翻译)
Jan 23 Python
python生成日历实例解析
Aug 21 Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
在Lighttpd服务器中运行Django应用的方法
Jul 22 Python
Python验证码识别处理实例
Dec 28 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
安装docker-compose的两种最简方法
Jul 30 Python
Django框架创建项目的方法入门教程
Nov 04 Python
Python PyQt5整理介绍
Apr 01 Python
Python爬虫爬取博客实现可视化过程解析
Jun 29 Python
python 实现超级玛丽游戏
Nov 25 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抓取及分析网页的方法详解
2016/04/26 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
node.js中的path.sep方法使用说明
2014/12/08 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
vue bus全局事件中心简单Demo详解
2018/02/26 Javascript
vue+SSM实现验证码功能
2018/12/07 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
js实现简单的倒计时
2021/01/28 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中的Descriptor描述符学习教程
2016/06/02 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
python全栈开发语法总结
2020/11/22 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
Internet体系结构
2014/12/21 面试题
小加工厂管理制度
2014/01/21 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
新年主持词
2014/03/27 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL