算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》

上传人:宝路 文档编号:52640927 上传时间:2018-08-24 格式:PPT 页数:45 大小:365.52KB
返回 下载 相关 举报
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》_第1页
第1页 / 共45页
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》_第2页
第2页 / 共45页
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》_第3页
第3页 / 共45页
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》_第4页
第4页 / 共45页
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》》由会员分享,可在线阅读,更多相关《算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》(45页珍藏版)》请在金锄头文库上搜索。

1、优化,再优化!,从鹰蛋一题浅析对动态规划算法的优化,安徽省芜湖市第一中学 朱晨光,引言,在当今的信息学竞赛中,动态规划可以说是一种十分常用的算法。它以其高效性受到大家的青睐。然而,动态规划算法有时也会遇到时间复杂度过高的问题。因此,要想真正用好用活动态规划,对于它的优化方法也是一定要掌握的。,本文将就鹰蛋这道题目做较为深入的分析,并从中探讨优化动态规划的本质思想与一般方法。,问题,当鹰蛋从第E层楼及以下楼层落下时是不会碎的,但从第(E+1)层楼及以上楼层向下落时会摔碎。,有一堆共M个鹰蛋,一位教授想研究这些鹰蛋的坚硬度E。他是通过不断从一幢N层的楼上向下扔鹰蛋来确定E的。,如果鹰蛋未摔碎,还可

2、以继续使用;但如果鹰蛋全碎了却仍未确定E,这显然是一个失败的实验。教授希望实验是成功的。,问题,例如:若鹰蛋从第1层楼落下即摔碎,E=0;若鹰蛋从第N层楼落下仍未碎,E=N。,这里假设所有的鹰蛋都具有相同的坚硬度。给定鹰蛋个数M与楼层数N (M,N=1000) , 求最坏情况下确定E所需要的最少次数。,样例: M=1,N=10ANS=10 (解释:只能将这个鹰蛋从下往上依次摔),算法一,由于是求最优值,我们自然想到了使用动态规划!,算法一,状态定义:,f(i,j): 用i个蛋在j层楼上最坏情况下确定E所需要的最少次数。,状态转移:,f(i-1,w-1)次,f(i,j-w)次,算法一,状态定义:

3、,f(i,j): 用i个蛋在j层楼上最坏情况下确定E所需要的最少次数。,状态转移:,f(i,j)=minmaxf(i-1,w-1),f(i,j-w)+1|1=w= 时,直接输出即可.,算法的时间复杂度立即降为O(N2log2N),算法二,这里,我们是通过减少状态总数而得到了优化的空间,从而大大提高了算法效率。这也是优化动态规划算法的一种常用方法。,然而优化还远未结束!,算法三,经观察发现,动态规划函数f(i,j)具有如下单调性:,f(i,j)=f(i,j-1) (j=1),这条性质可以用数学归纳法进行证明,这里就从略了。,那么,f(i,j)的单调性有什么作用呢?,算法三,(如图,令为f(i-1

4、,w-1)的图象,为f(i,j-w)的图象,即为maxf(i-1,w-1),f(i,j-w)+1的图象),算法三,这样,我们就成功地将状态转移的时间复杂度降为O(log2N) ,算法的时间复杂度也随之降为O(N(log2N)2) .,在对算法三进行研究之后,我们会萌生一个想法:既然现在f(i,j)都需要求出,要想找到更高效的算法就只能从状态转移入手,因为这一步是O(log2N),仍然不够理想。,因此,算法四将以状态转移为切入点,进一步探究优化的空间。,算法四,根据这个不等式,我们可以得到如下推理:,若存在一个决策w使得f(i,j)=f(i,j-1),则f(i,j)=f(i,j-1),若所有决策

5、w均不能使f(i,j)=f(i,j-1),则f(i,j)=f(i,j-1)+1,通过进一步挖掘状态转移方程,我们得到如下不等式:,f(i,j-1)=1),算法四,这里,我们设一指针p,并使p时刻满足:,f(i,p)=f(i,j-1)-1 且 f(i,p+1)=f(i,j-1),由状态转移方程可知,决策时f(i,p)所对应的函数值是f(i-1,j-p-1).,下面,我们将证明只需通过判断f(i,p)与f(i-1,j-p-1)的大小关系便可以决定f(i,j)的取值。,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f

6、(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,算法四,f(i-1),f(i),j,大于 等于,(s=j-p-1),算法四,f(i-1),f(i),j,p+1,算法四,f(i-1),f(i),j,f(i,j)=f(i,j-1),算法四,f(i-1),f(i),j,小于,f(i-1,s)f(i,p)=f(i,j-1)-1,情况一(pf(i,j-1),大于等于,大于,大于等于,情况二(p=p),f(i-1),f(i),j,p+1,maxf(i,p),f(i-1,s)+1f(i,j-1),大于

7、,情况三(pp),f(i-1),f(i),j,p+1,s,maxf(i,p),f(i-1,s)+1f(i,j-1),算法四,因此,我们只需根据f(i,p)与f(i-1,j-p-1)的大小关系便可直接确定f(i,j)的取值,从而使状态转移成功地降为O(1),算法的时间复杂度降为O(Nlog2N),综上所述,当f(i,p)=f(i-1,j-p-1)时,可以直接得出f(i,j)=f(i,j-1); 当f(i,p)=1),状态转移也十分简单。,很显然,无论有多少鹰蛋,若只试1次就只能确定一层楼,即g(1,j)=1 (j=1),g(i,j)=g(i-1,j-1)+g(i-1,j)+1 (i,j1),算法五,我们的目标便是找到一个x,使x满足g(x-1,M)=N ,答案即为x.,这个算法乍一看是O(Nlog2N)的,但实际情况却并非如此。,经过观察,我们很快会发现,函数g(i,j)与组合函数C(i,j)有着惊人的相似,而且可以很容易证明对于任意i,j (i,j=1), 总有g(i,j)= C(i,j).,算法五,这样,我们可以得到C(x-1,M)=g(x-1,M)1),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号