- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
李远韬动态规划 - 算法与数据结构课程网站.ppt
动态规划 2009级信科1班 李远韬 动态规划的基本原理 将问题转化为规模更小的问题解决。 动态规划与有哪些信誉好的足球投注网站的区别在于动态规划会将已经解决过的子问题的解保存下来,下次需要时直接调用(以空间换时间),而有哪些信誉好的足球投注网站则会将已经计算过的问题再计算一遍。 状态、阶段与决策 状态:用于描述一个子问题 阶段:按照一定的顺序计算所有子问题 决策:通过决策将一个问题转化为更小的子问题 使用动态规划的两个基本条件 最优子结构:问题的最优解只取决与子问题的最优解,即局部最优推出全局最优 无后效性:问题只依赖于更小的子问题,即能够按一定的顺序计算每个子问题,使得每个子问题的解都只依赖于前面已经计算过的问题的解 一个简单的例子:最长上升子序列 给出一个序列a1,a2,…,an,找到序列a的子序列a(i1),a(i2),...,a(il),1=i1i2...il=n,a(i1)a(i2)...a(il),使得l最大 一个简单的例子:最长上升子序列 状态:f[i]表示序列a1,a2,...,ai的包含ai的最长的子序列的长度 阶段:按i从小到大划分阶段,即按照i从小到大的顺序计算f[i],计算f(i)时只依赖于前面计算过的f值 决策:枚举f(i)对应的子序列a(i1),a(i2),...,a(i(l-1)),i中i(l-1)的值,设i(l-1)=j,则问题转化为在a1,a2,...,aj中找最长上升子序列 一个简单的例子:最长上升子序列 状态转移方程:f(i)=max{f(j)+1},(1=ji,ajai) 时间复杂度:O(n^2) 动态规划的两种优化方法 简化状态,减少状态总数 减少可行的决策 牛场围栏(fence) 有N种木料,长度分别为L1,L2,...,LN,每种木料数量无限,每根木料最多可以削短M米,且只能削去整数米,用这些木料修建围栏,问无法修建的最大围栏的长度,如果这个值为无穷大或者任何长度的围栏都可以修建,输出-1 数据范围:N=100,M=3000,1=Li=3000 简化问题 预处理:将每根木料分别削去0,1,2,...,m,得到m根木料,再统计所有的木料长度,去除重复 问题简化为有m根木料,长度分别为L1,L2,...,Lm(不能削短),问不能拼出的最长围栏的长度(或输出无解) 下面只讨论简化后的问题 牛场围栏(fence) 一个很自然的想法是通过动态规划计算出对于每个长度L,能否通过现有的木料拼出,但是长度L是没有限制的,即状态的总数可以达到无限,必须减少状态总数 牛场围栏(fence) 如果存在长度为L的木料,注意到如果可以拼出长度为x的围栏,那么长度为x+L,x+2L,x+3L,...,x+kL...,的围栏都可以被拼出 牛场围栏(fence) 我们将状态设为f(i),(0=iL)表示最小的整数x,满足x可以被拼出,且x mod L=i,如果x不存在,则f(i)为正无穷 为了减少状态总数,加快速度,我们取L=min{L1,L2,...,Lm} 如果我们能计算出所有的f(i),则答案ans=max{f(i)-L},ans0时则所有长度的围栏都可以被拼出 牛场围栏(fence) 状态转移方程: f(i)=min{f(j)+Lk} ,((j+Lk) mod L=i) 如何划分阶段?? 如果按照i从小到大划分阶段,不满足无后效性 牛场围栏(fence) 仔细观察状态转移方程 f(i)=min{f(j)+Lk} ,((j+Lk) mod L=i) 注意到f(0)=0,我们建立一个N个节点的图,以0为源点,对所有满足(j+Lk) mod L=i的点i,j,从i向j连一条长度为Lk的边,则f(i)就等于从0到i的最短路 时间复杂度:O(L^2) 牛场围栏(fence) 此题中的最短路算法本质上也可以看做是以f(i)的值从小到大划分阶段的动态规划,因为f(i)只能由比f(i)的值小的状态f(j)推出。 小结 在上面一道题中,我们通过分析问题,减少状态总数,成功的解决了此题 下面我们来看一个通过减少决策总数来优化动态规划的例子 序列划分 给出一个正整数序列,a1,a2,…,aN,将序列分成若干段,每段有一个权值,如将ai,…,aj划分成一段,则该段权值F=(a(i)+a(i+1)+…+a(j))*i+T,求一种划分方案,使得每段的权值之和最小 数据范围:1=N=1000000 序列划分 我们可以很容易的得到一个O(N^2)的动态规划 设状态为f[i],表示序列a1,a2,…,ai的最优划分方案中每段的权值之和 状态转移方程为f[i]=min{(sum[i]-sum[k])*i+t+f[k]},其中sum[i]=a1+a2+…+ai 但是此题中N的范围可以达到1000000,需要优化算法 序列划分 对于状态f[i]的两种决策k
您可能关注的文档
最近下载
- 牙齿健康和龋齿预防科普知识ppt(共67张PPT).pptx VIP
- 2024年10月 政法干警锻造新时代政法铁军专题研讨班发言材料.docx VIP
- 反恐验厂-危机管理和应急恢复计划.doc
- 2024.10 政法干警锻造新时代政法铁军专题研讨班发言材料.docx VIP
- 六年级上册快乐读书吧知识测试题及答案.pdf VIP
- 北京字节跳动科技有限公司运营模式分析及发展趋势预测研究报告.docx VIP
- 《财务风险管理—以乐视公司为例》10000字.docx
- 人教八年级上册物理《光的反射》PPT教学课件.pptx
- 信息资源管理专业毕业设计论文:信息资源管理在学校教育中的应用研究.docx VIP
- 网络安全项目网络建设方案.doc
文档评论(0)