没有合适的资源?快使用搜索试试~ 我知道了~
算法合集之《从《鹰蛋》一题浅析对动态规划算法的优化》1
需积分: 0 6 下载量 47 浏览量
2022-08-04
11:57:40
上传
评论
收藏 444KB PDF 举报
温馨提示
试读
43页
摘要本文就 Ural 1223 《鹰蛋》这道题目介绍了五种性能各异的算法,并在此基础上总结了优化动态规划算法的本质思想及其一般方法。全文可以分为四个部分。第一部
资源详情
资源评论
资源推荐
IOI2004 国家集训队论文 朱晨光
第 1 页 共 22 页
优化,再优化!
——从《鹰蛋》一题浅析对动态规划算法的优化
安徽省芜湖市第一中学 朱晨光
目录
Ø 关键字........................................................................................2
Ø 摘要............................................................................................2
Ø 正文............................................................................................2
n 引言 ......................................................................................2
n 问题 ......................................................................................2
n 分析 ......................................................................................3
u 算法一.............................................................................3
u 算法二.............................................................................4
u 算法三.............................................................................4
u 算法四.............................................................................6
u 小结.................................................................................7
u 算法五.............................................................................7
Ø 总结..........................................................................................10
Ø 结束语.......................................................................................11
IOI2004 国家集训队论文 朱晨光
第 2 页 共 22 页
关键字
优化 动态规划 模型
摘要
本文就 Ural 1223 《鹰蛋》这道题目介绍了五种性能各异的算法,并在此基础上
总结了优化动态规划算法的本质思想及其一般方法。全文可以分为四个部分。
第一部分引言,阐明优化动态规划算法的重要性;
第二部分给出本文讨论的题目;
第三部分详细讨论这道题目五种不同的动态规划算法,并阐述其中的优化思想;
第四部分总结全文,再 次说明对于动态规划进行优化的重要性,并分析优化动态
规划的本质思想与一般方法。
正文
引言
在当今的信息学竞赛中,动态规划可以说是一种十分常用的算法。它以其高
效性受到大家的青睐。然而,动态规划算法有时也会遇到时间复杂度过高的问题。
因此,要想真正用好用活动态规划,对于它的优化方法也是一定要掌握的。
优化动态规划的方法有许多,例如四边形不等式、斜率优化等。但是这些方
法只能对某些特定的动态规划算法进行优化,尚不具有普遍的意义。本文将就《鹰
蛋》这道题目做较为深入的分析,并从中探讨优化动态规划的本质思想与一般方
法。
问题
有一堆共 M 个鹰蛋,一位教授想研究这些鹰蛋的坚硬度 E。他是通过不断
从一幢 N 层的楼上向下扔鹰蛋来确定 E 的。当鹰蛋从第 E 层楼及以下楼层落下
时是不会碎的,但从第(E+1)层楼及以上楼层向下落时会摔碎。如果鹰蛋未摔
碎,还可以继续使用;但如果鹰蛋全碎了却仍未确定 E,这显然是一个失败的实
验。教授希望实验是成功的。
例如:若 鹰蛋从第 1 层楼落下即摔碎,E=0;若鹰蛋从第 N 层楼落下仍未碎,
E=N。
这里假设所有的鹰蛋都具有相同的坚硬度。给定鹰蛋个数 M 与楼层数 N。
要求最坏情况下确定 E 所需要的最少次数。
IOI2004 国家集训队论文 朱晨光
第 3 页 共 22 页
样例:
M=1,N=10
ANS=10
样例解释:为了不使实验失败,只能将这个鹰蛋按照从一楼到十楼的顺序依
次扔下。一旦在第(E+1)层楼摔碎,E 便确定了。(假设在第(N+1)层摔鹰蛋
会碎)
分析
算法一
乍一看这道题,算法并不十分明晰,因为这并不是简单的二分查找,还有对
鹰蛋个数的限制。但由于这题是求最优值,我们便自然想到了动态规划。
状态定义即为用 i 个蛋在 j 层楼上最坏情况下确定 E 所需要的最少
次数,记为 f(i,j)。
很显然,当层数为 0 时 f(i,j)=0,即 f(i,0)=0 (i>=0); 当鹰蛋个数为 1
时,为了不使实验失败,只能从下往上依次扔这个鹰蛋以确定 E,即
f(1,j)=j (j>=0).
下面是状态转移:
假设我们在第 w 层扔下鹰蛋,无外乎有两种结果:
①鹰蛋摔碎了,此时必有 E<w,我们便只能用(i-1)个蛋在
下面的(w-1)层确定 E,并且要求最坏情况下次数最少,这是一个子问
题,答案为 f(i-1,w-1),总次数便为 f(i-1,w-1)+1;
②鹰蛋没摔碎,此 时 必 有 E>=w .我们还能用这 i 个蛋在上面的(j-w)
层确定 E。注意,这里的实验与在第 1~(j-w)层确定 E 所需次数是一样
的,因为它们的实验方法与步骤都是相同的,只不过这(j-w)层在上面罢
了。完全可以把它看成是对第 1~(j-w)层进行的操作。因此答案为 f(i,j-w),总次数
便为 f(i,j-w)+1。(如图 1)
题目要求最坏情况下的最小值,所以这两种情况的答案须取较大值,且又要
在所有决策中取最小值,所以有
f(i,j)=min{max{f(i-1,w-1),f(i,j-w)}+1|1<=w<=j} ①
很显然,所需鹰蛋个数必不会大于 N,因此当 M>N 时可令 M=N,且并不影
响结果。所以这个算法的时间复杂度是 O(MN
2
)=O(N
3
),空间复杂度是 O(N)(可
用滚动数组优化)。
(j-w)层
(w-1)层
j 层
图 1
IOI2004 国家集训队论文 朱晨光
第 4 页 共 22 页
算法二
这个算法的时间复杂度太高,有没有可以优化的余地呢?答案是肯定的。首
先,这题很类似于二分查找,即每次根据扔鹰蛋所得信息来决定下一步操作的区
间,只不过对鹰蛋碎的次数有限制罢了。假设我们对于鹰蛋的个数不加限制,那
么根据判定树的理论
1
,叶子结点个数共有(n+1)个,(E 的取值只可能是 0,1,2,
…
,n
共(n+1)种情况),则树的高度至少为
)1(log
2
+n +1,即比较次数在最坏情况下
需要
)1(log
2
+n 次。而我们又知道,在 n 个排好序的数里进行二分查找最坏情
况下需要比较
)1(log
2
+n 次(在这个问题中,若未查找到可视为 E=0)。这两点
便决定了
)1(log
2
+n 是下限而且是可以达到的下限。换句话说,对于一个确定
的 n,任意 M 所得到的结果均不会小于
)1(log
2
+n 。一旦 M>=
)1(log
2
+n ,该
题就成了求二分查找在最坏情况下的比较次数,可以直接输出
)1(log
2
+n 。因
此时间复杂度立即降为 O(N
2
log
2
N).
由此可见,对 于 动态规划的优化是十分必要的。算法二仅通过考察问题自身
的性质便成功地减少了状态总数,从 而 降低了算法一的时间复杂度,大大提高了
算法效率。
算法三
然而优化还远未结束。经实践证明,M 的大小已经不能再加限制了,因此
我们不妨从动态规划方程本身入手,探寻新的优化手段。
在实际操作中,我们发现 f(i,j)>=f(i,j-1) (j>=1)总是成立的。那么是否可以对
该性质进行证明呢?是的。这里用数学归纳法加以证明。
当 i=1 时,由于 f(1,j)=j (j>=0),显然有 f(i,j)>=f(i,j-1)(j>=1)成立。
当 i>=2 时
2
,f(i,0)=0,f(i,1)=max{f(i-1,0),f(i,0)}+1=1,即当 j=1 时,f(i,j)>=f(i,j-1)
现在假设当 j=k-1 时,f(i,j)>=-f(i,j-1)成立(k>1) ,则当 j=k 时,
f(i,j)=f(i,k)=min{max{f(i-1,w-1),f(i,k-w)}+1|1<=w<=k}
f(i,j-1)=f(i,k-1)=min{max{f(i-1,w-1),f(i,k-1-w)}+1|1<=w<=k-1}
当 1<=w<=k-1 时,∵k-1-w<k-w<=k-1,根据归纳假设,有 f(i,k-w)>=f(i,k-1-w),
∴max{f(i-1,w-1),f(i,k-w)}+1>=max{f(i-1,w-1),f(i,k-1-w)}+1
1
有关判定树的理论详情请见参考文献[1]第 292~293 页。
2 这里,我们按照 i依次增大的顺序进行证明,即先证明 i =2的情况,再 证 明 i=3的情况,…… ,
依此类推。
IOI2004 国家集训队论文 朱晨光
第 5 页 共 22 页
令 t=min{ max{f(i-1,w-1),f(i,k-w)}+1|1<=w<=k-1},
则有 t>=min{max{f(i-1,w-1),f(i,k-1-w)}+1|1<=w<=k-1}=f(i,k-1) (1)
又 f(i,k)=min{t,max{f(i-1,k-1),f(i,0)}+1}=min{t,max{f(i-1,k-1),0}+1}
∵对于 1<=i<=n,0<=j<=m,f(i,j)>=0
∴f(i,k)=min{t,f(i-1,k-1)+1}
在(1)式中,令 w=k-1,
=>f(i,k-1)<=max{f(i-1,k-2),f(i,0)}+1=f(i-1,k-2)+1<=f(i-1,k-1)+1
即 f(i-1,k-1)+1>=f(i,k-1),又 t>=f(i,k-1) ,
∴f(i,k)=max{t,f(i-1,k-1)+1}>=f(i,k-1)
即 f(i,j)>=f(i,j-1),命题得证。
所以有 f(i,j)>=f(i,j-1) (j>=1) ②
由此结论,可以在状态转移中使用二分法:
i) 若 f(i-1,w-1)<f(i,j-w),则对于 w’<w,必有 f(i,j-w’)>=f(i,j-w)
∴max{f(i-1,w’-1),f(i,j-w’)}+1>=f(i,j-w’)+1>=f(i,j-w)+1=max{f(i-1,w-1),f(i,j-w)}+1
∴决策为 w’必无决策为 w 好;
ii) 若 f(i-1,w-1)>=f(i,j-w),则对于 w’>w,必有 f(i-1,w’-1)>=f(i-1,w-1),
∴max{f(i-1,w’-1),f(j,j-w’)}+1>=f(i-1,w’-1)+1>=f(i-1,w-1)+1=max{f(i-1,w-1),f(i,j-w)}+1
∴决策为 w’必无决策为 w 好;
(如图 2,令①为 f(i-1,w-1)图象,②为 f(i,j-w)图象(皆用线段连结相邻两点),
③即为 max{f(i-1,w-1),f(i,j-w)}+1 的图象)
可见 w1 对应情况 i),w2 对应情况 ii),最优取值即为 w=wbest 时的取值.
因此,在状态转移中,可以像二分查找那样,每次将 w 的取值范围缩小一
半,这样就能在
)1(log
2
+n 次之内找到最佳的决策 wbest。
这样,根据 f(i,j)的单调性,我们又成功地将状态转移降为 O(log
2
N)级,从 而
图 2
剩余42页未读,继续阅读
天眼妹
- 粉丝: 21
- 资源: 333
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0