算法设计与分析 课件 许瑾晨 第五章 动态规划序.pptx

算法设计与分析 课件 许瑾晨 第五章 动态规划序.pptx

  1. 1、本文档共181页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

信息工程大学

国家级实验教学示范中心计算机学科组规划教材算法设计与分析Python案例详解微课视频版

动态规划介绍

动态规划(DynamicProgramming,DP)

20世纪50年代初,美国数学家

理查德•贝尔曼等人在研究多阶段决

策过程的优化问题时,提出了著名的

最优化原理,从而创立了动态规划。

R.RichardBellman(1920~1984)

动态规划介绍

动态规划的应用非常广泛,包括工程技术、经济、

工业生产、军事以及自动化控制等领域。

主要内容

问题引出原理和步骤典型应用

•兔子繁殖•两个重要性•0-1背包

•数字三角形质•矩阵连乘

•最优子结构•最长公共子

•重叠子问题序列

•求解步骤•最长不上升

(四步)子序列

•编辑距离

•最优二叉搜

索树

信息工程大学

国家级实验教学示范中心计算机学科组规划教材算法设计与分析Python案例详解微课视频版

一问题描述

兔子繁殖问题:

一对兔子从出生后第三个月开始,每月会生

一对小兔子。如果兔子只生不死,一月份抱来一

对刚出生的小兔子,问一年中每个月各有多少对

兔子。

二问题分析

F(n)表示第n个月的兔子对数,

F(n)=上个月的兔子+本月新出生的兔子

F(n-1)F(n-2)

二问题分析

斐波纳契数列(FibonacciSequence)

1,1,2,3,5,8,11,19,30,49,……

1ifn=0or1

Fn

()=F(n-1)+F(n-2)ifn1

三问题求解

方法一:递归实现F(n)=F(n-1)+F(n-2)

基于分治的递归实现:

intF(intn)

{

if(n==0||n==1)return1;

returnF(n-1)+F(n-2);

}

问题:该方法求解第n项的时间复杂度是多少?

三问题求解

单选题。

递归求解Fibonacci数列第n项的时间复杂度是多少?

A.O(n)

B.O(n2)

C.O(2n)

D.O(1)

三问题求解

方法一:递归实现F(n)=F(n-1)+F(n-2)

T(n)=T(n-1)+T(n-2)+1=O(2n)

思考:时间复杂度高的原因是什么?

原因:存在大量的重复计算。

F(n)

F(n-1)F(n-2)

F(n-2)F(n-3)F(n-3)F(n-4)

F(n-3)F(n-4)F(n-4)F(n-5)F(n-4)F(n-5)F(n-5)F(n-6)

三问题求解

方法二:带记忆的递归实现(备忘录)

去除重复计算的方法:保存计算结果

/*A[i]表示第i个月的兔子对数,初始化为0*/

intA[MAXSIZE]={0};

intF(intn)

{

if(n==0||n==1)A[n]=1;

elseif(A[n]==0)A[n]=F(n-1)+F(n-2);

returnA[n];

}

文档评论(0)

xiaobao + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档