ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:119.42KB ,
资源ID:23093882      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23093882.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新1D1D动态规划优化初步汇总.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新1D1D动态规划优化初步汇总.docx

1、最新1D1D动态规划优化初步汇总1D1D动态规划优化初步1D/1D动态规划优化初步 所谓1D/1D动态规划,指的是状态数为O(n),每一个状态决策量为O(n)的动态规划方程。直接求解的时间复杂度为O(n2),但是,绝大多数这样的方程通过合理的组织与优化都是可以优化到O(nlogn)乃至O(n)的时间复杂度的。这里就想讲一讲我对一些比较初步的经典的优化方法的认识。 本文中不想进行过多的证明与推导,主要想说明经典模型的建立、转化与求解方法。 由于本人认识与水平相当有限,如果出现什么错误与疏漏,还请大牛多多指正。另外,也希望大牛们更多地向我们介绍一下有关动态规划优化的更深入的东西。 本文中使用两种方

2、式表示一个函数:f(x)与fx,用方括号表示的函数值可以在规划之前全部算出(常量),而用圆括号表示的函数值必须在规划过程中计算得到(变量)。无论是什么函数值一经确定,在以后的计算中就不会更改。经典模型一: 相信这个方程大家一定是不陌生的。另外,肯定也知道一个关于决策单调性的性质: 假如用k(x)表示状态x取到最优值时的决策,则决策单调性表述为: ,当且仅当: ,对于这个性质的证明读者可以在任意一篇讲述四边形不等式的文章中找到,所以这里不再重复。而且,从实战的角度来看,我们甚至都不需要验证w函数的这个性质,最经济也是最可靠的方法是写一个朴素算法打出决策表来观察(反正你总还是要对拍)。当然,有的时

3、候题目要求你做一点准备工作,去掉一些明显不可能的决策,然后在应用决策单调性。这是上述性质也许会有点用处。 正如前文中所述,我们关注的重点是怎样实现决策单调性。有了决策单调性,怎样高效地实现它呢?很容易想到在枚举决策的时候,不需要从1开始,只要从k(x-1)开始就可以了,但这只能降低常数,不可能起到实质性的优化。 另一种想法是从k(x-1)开始枚举决策更新f(x),一旦发现决策u不如决策u+1来得好,就停止决策过程,选取决策u作为f(x)的最终决策。这样时间是很大提高了,但可惜是不正确的。决策单调性并没有保证f(j)+wj,x有什么好的性质,所以这样做肯定是不对的。 刚才我们总是沿着“f(x)的

4、最优决策是什么”这个思路进行思考,下面我们换一个角度,思考对于一个已经计算出来的状态f(j),“f(j)能够更新的状态有哪些”。这样,每一步过程中某些状态的决策可能不是最优的,但是当算法结束的时候所有状态对应的决策一定是最优的。 一开始,只有f(1)的函数值被计算出来,于是所有状态的当前最优决策都是1。 111111*111111111111111111111111111111111111111111111111 现在,显然f(2)的值已经确定了:它的最有决策只能是1。我们用决策2来更新这个决策表。由于决策单调性,我们知道新的决策表只能有这样的形式: 111111*11111111111111

5、1222222222222222222222222222222 这意味着我们可以使用二分法来查找“转折点”,因为如果在一个点x上,如果决策2更好,则所有比x大的状态都是决策2更好;如果x上决策1更好,则所有比x小的状态都是决策1更好。 现在决策1和决策2都已经更新完毕,则f(3)业已确定,现在用决策3来更新所有状态。根据决策单调性,现在的决策表只能有以下2种类型: 111111*11111111111111111122222222222222222233333333333 111111*1111111111333333333333333333333333333333333333 而这样的决策表

6、示绝对不会出现的: 111111111111333333333333333333322222222222222222222222222222,不可能。 那么,我们的更新算法就是:1、 考察决策2的区间b,e的b点上是否决策3更优,如果是,则全部抛弃决策2,将此区间划归决策3;如果否,则在决策2的区间b,e中二分查找转折点。2、 如果第1问的回答是“是”,则用同样的方法考察决策1。 推演到这一步,相信决策单调性的实现算法已经明了了:使用一个栈来维护数据,占中的每一个元素保存一个决策的起始位置与终了位置,显然这些位置相互连接且依次递增。当插入一个新的决策时,从后到前扫描栈,对于每一个老决策来说,做

7、这样两件事:1、 如果在老决策的起点处还是新决策更好,则退栈,全额抛弃老决策,将其区间合并至新决策中,继续扫描下一个决策。2、 如果在老决策的起点处是老决策好,则转折点必然在这个老决策的区间中;二分查找之,然后新决策进栈,结束。由于一个决策出栈之后再也不会进入,所以均摊时间为O(1),但是由于二分查找的存在,所以整个算法的时间复杂度为O(nlogn)。下面我们来看两个例题。例题1:玩具装箱。题目来源:湖南省选2008。题目大意:有n个玩具需要装箱,每个玩具的长度为ci,规定在装箱的时候,必须严格按照给出的顺序进行,并且同一个箱子中任意两个玩具之间必须且只能间隔一个单位长度,换句话说,如果要在一

8、个箱子中装编号为ij的玩具,则箱子的长度必须且只能是 ,规定每一个长度为l的箱子的费用是,其中L是给定的一个常数。现在要求你使用最少的代价将所有玩具装箱,箱子的个数无关紧要。分析:本题可以很轻松地列出一个1D1D的动态规划方程: ,其中。 不难验证这个方程式满足决策单调性的,于是我们可以直接套用上文中的方法进行优化,时间复杂度为O(nlogn)。例题2:土地购买题目来源:USACO Monthly, March, 2008, Gold题目大意:有N块土地需要购买,每块土地都是长方形的,有特定的长与宽。你可以一次性购买一组土地,价格是这组土地中长的最大值乘以宽的最大值。比方说一块5*3的土地和一

9、块2*9的土地在一起购买的价格就是9*3。显然,怎样分组购买土地是一门学问,你的任务就是设计一种方案用最少的钱买下所有的土地。分析:将所有土地按照长度降序排列,依次检索,则当前土地的长度必然在上一块土地之内,我们只需要考虑宽度就可以了。而在宽度的问题上,当前土地的行为只能是这样:和前面若干块土地绑定;同时这些绑定的土地和他们前后的土地分离。这样很容易得出状态转移方程:这个方程还不能满足决策单调性,下面我们试图再做一下简化。如果将每一个土地的尺寸看成是一个二维坐标的话,(如下图) 其中不难看出,红色点完全可以忽略,这些点(x,y)必然满足一个性质:存在点(x, y)同时满足x = x且y = y

10、,这样它就能被一个组完全覆盖。这些被忽略的点可以通过一次线形的扫描得出。 下面,我们着重来看一下不能被忽略的这些点,它们的排布方式必然是单调减。因此状态转移方程可以写成这个样子: 这个转移方程就是标准的决策单调性了,读者可以通过w函数的性质直接证明它。然后,就用上文中的方法在O(nlogn)时间内求解。 以上两个例子都是决策单调性的直接应用。其中第二个例子稍微复杂一些,如果不忽略那些“肯定无用”的决策,不对数据进行有序化,则方程是不满足决策单调性的。这也就提醒我们在做这一类题目的时候不能钻牛角尖死做,还得灵活一点。 另外,决策单调性提供的只是O(nlogn)的算法,事实上上面两个例题的最佳算法

11、都是O(n)的,在后文中我们将详细介绍另外一种经典模型,并且试图将这两个规划方程通过数学变换转向另一个模型。=下面我们来看一类特殊的w函数:,显然,这一类函数都是满足决策单调性的。但是不同的是,由于这一类函数的特殊性,他们可以用一种更加简洁也更加有借鉴意义的方法解决。 由于w函数满足,我们总是可以找到一个特定的一元函数wx,使得,这样,假设状态f(x)的某一个决策是k,有:,其中。这样我们发现:一旦f(k)被确定,相应地g(k)也被确定,更加关键的是,无论k值如何,wx-w1总是一个常数。换句话说,我们可以把方程写成下述形式:。不难发现这个方程是无聊的,因为我们可以用一个变量“打擂台”直接存储

12、;但是,如果在k的下界上加上一个限制,那这个方程就不是很无聊了。于是,我们就得到了另一个经典模型。经典模型二:,其中,bx随x不降。 这个方程怎样求解呢?我们注意到这样一个性质:如果存在两个数j, k,使得j = k,而且g(k) = g(j),则决策j是毫无用处的。因为根据bx单调的特性,如果j可以作为合法决策,那么k一定可以作为合法决策,又因为k比j要优,(注意:在这个经典模型中,“优”是绝对的,是与当前正在计算的状态无关的),所以说,如果把待决策表中的决策按照k排序的话,则g(k)必然是不降的。 这样,就引导我们使用一个单调队列来维护决策表。对于每一个状态f(x)来说,计算过程分为以下几

13、步:1、 队首元素出队,直到队首元素在给定的范围中。2、 此时,队首元素就是状态f(x)的最优决策,3、 计算g(x),并将其插入到单调队列的尾部,同时维持队列的单调性(不断地出队,直到队列单调为止)。重复上述步骤直到所有的函数值均被计算出来。不难看出这样的算法均摊时间复杂度是O(1)的。下面我们来看几个例题。例题3:The Sound of Silence题目来源:Baltic Olympiad in Informatics 2007题目大意:给出一个N项的数列,如果对于一个连续的长度为M的片段来说,片段内所有数中最大值与最小值的差不超过一个给定的常数C,则我们称这样的片段是一个合法的片段。

14、编程求出所有的合法片段的起始位置。分析:本题不难看出可以分解为两个子问题:求所有片段的最大值以及求所有片段的最小值。而这两个任务实际上是一样的,所以我们只需要求取所有的连续M个数的片段中的最小值。 这个任务有很多很多种对数级算法,其中用堆或者用静态最优二叉树都可以做到O(nlogm),但是这题的O(n)算法还是不那么好想的。 事实上,如果用gx表示数列中第x个数的值,用f(x)表示以x作为结尾的有M个数的连续片段的话,显然有: ,直接吻合经典模型二。套用算法,就可以在O(n)的时间内解决问题。 (当然,本题还有一种别致的“窗口”算法,也漂亮地在O(n)的时间内解决了问题,详细可以看官方的解题报

15、告。这里引入本题的主要目的是在于佐证上文中讨论到的经典模型二)例题4:Islands题目来源:IOI2008题目大意:给出一个具有N个顶点的无向加权图,同时这个图中有且恰有N条边。现在,对于这个图中的每一个连通分量,求出其最长路径(权值和最大,一个节点在路径上最多只能出现一次)。分析:当然,这个问题更多的是一个图论题。但是在最后关键问题的处理上还是可以看到经典模型二的影子。 首先,用BFS找出所有连通分量。然后,对于一个连通分量来说,由于点数与边数相同,因此必然构成基环+外向树的结构。我们可以找出基环并确定所有外向树的结构。一条最长路径有两种可能:完整地位于某一棵外向树中;或者位于两棵外向树中

16、,其间通过基环的一段连接。第一种可能可以通过树形DP解决,问题就在于第二种可能怎样处理。如果枚举两棵外向树,那就是O(n2),就不可以接受了。 我们考虑破环为链,然后将链整体左移,制作一个副本。比方说,如果原来的环是:14 2,以1为首破环,得:1-2-3-4,然后制作副本,得2-3-4-1-2-3-4,制作副本3的主要目的是使得对于每一个点的方程都有统一的形式,使得环上所有片段都可以对应链上的一个片段。这种情况下,用gx表示x点上外向树上的最长下降路的长度,f(x)表示以该点为终点的总最长路径的长度,则有:,其中w函数即显然满足,通过变换之后就可以变成经典模型二。这样,就在总O(n)的时间内

17、解决了本题。 如果还嫌以上两个问题不够典型,下面举一个典型到所有OIer都耳熟能详的题目。例题5:有限背包问题。题目来源:经典问题。题目大意:有N件物品,每一件物品的价值为pk,重量为wk,最多只能选取mk次;现在给出背包的最大承重量C,要求在满足重量要求的条件下使得背包中的物品价值总和最大。分析:如果mk = 1或者mk = +,就都很好做。但现在mk是一个有界值,就比较麻烦了。我们还是按照背包问题的常见思路,一次枚举每一个物品。设当前枚举的物品编号为k,用f(x)表示:为了到达价值x,背包的重量至少应该是多少;则我们有:,这个方程很麻烦,因为某一个状态的决策不是连续的,而是间断性的。怎样把

18、决策区间变成一段连续区间呢?很容易想到等价类的思想;如果按照模pk对所有的f(x)划分等价类,那么在同一个等价类中,决策区间就是连续的了,我们不妨把新函数设为h(x),则方程变为:,其中,w函数即显然满足,(注意wk是一个与i和j无关的常量)经过适当的变化后可以转化为经典模型二。于是有限背包问题可以在O(NP)的时间内解决,其中P是背包可能取到的最大价值。(其实换成重量也一样),这也就是“背包十讲”中所说的那个单调队列法。 我们注意到,如果mk=1的话,那么每一个f(x)的决策量都是O(1),这没什么问题;但如果mk = +,有意味着什么呢?仔细观察可以发现,这实际上就拿掉了方程中的循环变量的

19、下界,对应的是这样的一个方程,这显然是很简单的,适用单变量打擂台就可以解决了(尽管我们通常并不这样做)。所以说,借助经典模型二,我们在一个更高的高度上统一了0-1、有限、无限三大背包问题。下面我们再次来看一下例题2土地购买中的那个方程:,我们来仔细地观察这个方程:f(k)是变量,yk+1是常量,但不论怎么说,这两个量在以后的计算中都不会变化。而xn是一个比例系数,它与k无关,只随着x的变化而变化。如果我们建立平面直角坐标系,以f(k)作为横轴,yk+1作为纵轴,则每一个状态f(k)都可以看作是该坐标系中的一个点。在求解状态f(n)的过程中,我要求最小化:,其中x, y是我建立的直角坐标系中某一

20、个点的坐标(表示一个决策),k就是方程中的xn,是只与n有关,而与决策无关的一个常量。这个最小化问题是什么呢?其实就是一个平面上的线性规划。我们把式子改写成:,就演变成了这样的一个问题:在一个直线簇中,选取一条直线,使得这条直线过某个给出的数据点,同时C要最小。既然问题变成了这么有意思的线性规划问题,就有必要进一步的研究,看看是不时有更好的解法,这就导致了我们的另一个经典模型:经典模型三:。 注意:这个模型写的比较抽象,其实它的涵盖范围是很广的。首先,ax, bx不一定要是常量,只要他们与决策无关,都可以接受;另外,f(i)和g(i)不管是常量还是变量都没有关系,只要他们是一个有最优的f(x)

21、决定的二元组就可以了。 因此,为了方便描述,我们把这个模型写成下面这个形式:, 其中,x(i),y(i)都是可以在常数时间内通过f(i)唯一决定的二元组。 这个经典模型怎样转化求解呢?前文说过,这样的模型的求解与平面上的线性规划有关,我们以x(i)为横轴,y(i)为纵轴建立平面直角坐标系,这样一个状态f(i)所决定的二元组就可以用坐标系中的一个点表示。然后,我们的目标是: ,其中,化成:,假设(反之亦然),则我们的任务是使得这条直线的纵截距最小。可以想象有一组斜率相同的直线自负无穷向上平移,所碰到的第一个数据点就是最优决策。 这个时候,有一个重要的性质,那就是:所有最优决策点都在平面点集的凸包

22、上。基于这个事实,我们可以开发出很多令人满意的算法。 这时,根据直线斜率与数据点分布的特征,可以划分为两种情况:情况一:决策直线的斜率与二元组的横坐标同时满足单调性。(具体的单调性视最优化目标的性质而定) 这样的模型是比较好处理的,因为这个时候由于斜率变化是单调的,所以决策点必然在凸壳上单调移动。我们只需要维护一个单调队列和一个决策指针,每次决策时作这样几件事:1、 决策指针(也就是队首)后移,直至最佳决策点。2、 进行决策。3、 将进行决策之后的新状态的二元组加入队尾,同时作Graham-Scan式的更新操作维护凸壳。(注意此时当前指针所在二元组有可能被抛弃)算法的时间复杂度为O(n)情况二

23、:没有任何限制。 这时问题的解决就比较困难了。显然,决策点还是应该在凸壳上。我们不妨考虑一个单调减的凸壳,这个凸壳上点与点之间的连线必然满足这样的性质:斜率单调减。通过细致的观察我们可以发现,对于一个给定的斜率k来说,对应的直线簇中具有最大纵截距的直线通过的决策点必然满足这样的性质:该点两侧的边的斜率k1, k2满足。 这样,我们就可以通过二分查找来确定最佳的决策点。 但是,在插入数据点的过程中,我们遇到的麻烦可能更大。首先,肯定是二分查找确定横坐标的插入点,然后对两侧分别进行Graham维护凸性。但接下来的问题就严重了:在维护凸形的过程中我们肯定删掉了一些点,怎样重新得到一个完整的凸壳决策表

24、呢?使用move是一个折中的办法,但是这与理论的时间复杂度分析根本无益。 完美的解决方法是应用平衡二叉树。我们以横坐标为关键字建立平衡二叉树,这样查找和插入的过程都可以在O(logn)时间内完成。当我们做Graham维护时,首先将新数据点Splay到根节点,此时剩下的节点必然分居左子树和右子树。然后,我们以左子树为例,后序遍历依次查找节点,直至查找到一个满足凸形的节点。将这个节点Splay到根节点的左孩子,然后删掉这个节点的右孩子。这样的算法的时间复杂度是O(nlogn),但是实现起来非常复杂。 下面我们来看几个例题。例题6:玩具装箱的线性算法。 例题1中玩具装箱的动态规划方程为: ,下面,我

25、们试图通过数学变换将其变成经典模型三。 为了简化计算,设,则: , 不妨设,显然这两个量都是常量,则: ,然后问题就明朗了,设平面直角坐标系中,则问题变成:,其对应的线性规划的目标直线为。回顾定义不难看出,ax随着x的增大而增大,x(i)也随着i的增大而增大。因此,问题中直线斜率单调减,数据点横坐标单调增,符合经典模型三种的情形1。使用单调队列维护凸壳可以在O(n)的时间内解决本题。例题七:货币兑换。题目来源:NOI2007题目大意:有3种货币体系:人民币,A券,B券,其中A券与B券的价格在每一天都是不同的。在某一天D,你可以做3件事情:1、 如果你的手头上有A券或B券,你可以将它们都按照当天

26、的价格换成人民币。2、 如果你的手头上有人民币,你可以将它们按照一个特定的比例Rate并以照当天的价格换成A券和B券(就是说你兑换的A券和B券的价值比是Rate)3、 什么也不做。一开始你有一些人民币,请你通过最佳的操作方式在最后一天结束的时候手头上握有最多的人民币。分析:试题中的Hint已经告诉我们,如果我们想买进人民币,就必须全额买进;如果我们想卖出人民币,就必须全额卖出。由于不管是在哪一天,人民币总是越多越好;我们用f(n)表示到了第n天最多可能持有的人民币数量,用x(i)和y(i)表示在第i天,用最多的钱能够换成的A券和B券。(注意:由于Rate确定,兑换金额确定,所以A券和B券的数量

27、是唯一确定的),我们有:,其中an和bn代表A券和B券在第n天的牌价。 这个方程式符合经典模型三中的情形二。所以,我们应该使用一个平衡树来维护凸形。时间复杂度是O(nlogn)。由于数据弱,所以这道题目用move也是可以搞定的。 这篇文章中,我们着重讨论了这样三类经典模型的建立与求解过程:经典模型一:,wi, x满足决策单调性。经典模型二:,其中bx单调增。经典模型三:,其中x(i),y(i)可以由f(i)在常数时间内唯一确定。 这三类模型都可以在至少O(nlogn)的时间内解决,从而起到了对1D/1D的方程的优化作用。另外,这三种模型并不是孤立存在的,而是可以互相转化的,文中的很多例题就兼具

28、多种模型的特点。 当然,本文只是对1D/1D动态规划优化的很初步很浅显的探讨,还有一些问题值得深入研究:1、 在经典模型一中,是否存在对于任意满足决策单调性的w函数都适用的O(n)的算法?我们只给出了O(nlogn)的通用算法以及对于一些特殊w函数的O(n)算法,希望能够获得通用的简洁的O(n)算法。2、 在经典模型一和经典模型二中,我们都可以给决策范围加上一个下界bx而丝毫不影响时间效率,只要bx单调递增的话。但是,在经典模型三中,由于算法依赖的策略选择顺序是基于方程本身的x(i)和y(i)所构成的平面的,与状态顺序并无关系,所以说,在这样的模型中如果加入bx元素,还是否能够得到优化的算法,

29、是一个问题。3、 上文中讨论的1D/1D方程都有一个显著特征:可选决策集是连续的。即使不是从1开始,而是从bx开始,但至少也是连续的。而事实上,很多经典的1D/1D方程不满足这个特征,比如LIS问题:只有关键字比当前关键字小的决策才是合法决策。这就完全不能用上文中描述的思路进行优化。对于更一般的1D/1D动态规划方程的优化方法,值得探究。4、 1D/1D方程还是有其局限性,毕竟状态总数是一维的。而在实战中,我们往往可以接触到不少2D/0D的方程,比如LCS,田忌赛马,建筑抢修,泡泡糖之类的题目。对于这样的方程的优化方法显然远远不如1D/1D方程的优化方法丰富。它们的优化思路也是有待大牛研究的重

30、要课题。一些练习题。1、 用两种方法实现玩具装箱以及土地购买2、瑰丽华尔兹 题目来源:NOI2005 题目大意:有一个N*M的棋盘,棋盘上有一些地方是空地,有一些地方是障碍物。现在,你从一个固定的起点开始沿着棋盘滑行。滑行的规则是这样的:在每一个时间点上,你可以选择原地不动,也可以选择按照一个特定的方向滑行一步。当然,你滑行的时候不能撞到障碍物。现在给你首尾相连的K个时间区间,每一个时间区间内的每一个时间点上的滑行方向都是一样的,你可以选择滑行或是不动。问你在所有的时间区间结束之后,你最多可以滑行多少步。(格子可以重复通过) 你应当给出O(NMK)的算法。 (提示:本题可以直接对应一个有限背包问题)3、Cactus Reloaded 题目来源:NEERC2007, 上海省选2008,POJ 3567 题目大意:一个具有N个节点,M条边的仙人掌图是指这样一个连通无向图,图中每一条边最多属于一个环。现在,要求你求出图中任意两个点之间最短路径的最大值。你应该给出O(N+M)的算法。 (Pascal语言中)你可以打开$M 5000000编译开关来进行递归而不需要考虑栈溢出。4、用平衡树实现货币兑换

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1