杨哲凸完全单调性的一个加强与应用

上传人:痛*** 文档编号:172655504 上传时间:2022-12-05 格式:PPT 页数:41 大小:393KB
返回 下载 相关 举报
杨哲凸完全单调性的一个加强与应用_第1页
第1页 / 共41页
杨哲凸完全单调性的一个加强与应用_第2页
第2页 / 共41页
杨哲凸完全单调性的一个加强与应用_第3页
第3页 / 共41页
点击查看更多>>
资源描述
凸完全单调性的一个加强与应用西安市第一中学杨哲四边形不等式、凸完全单调性与决策单调性以及凸完全单调性的一个加强第一部分四边形不等式、凸完全单调性与决策单调性n对于一个权函数w(i,j),如果它满足w(x,i+1)-w(x,i)随x单调不增,亦即w(x,i+1)+w(x+1,i)w(x,i)+w(x+1,i+1),则称这个权函数满足凸完全单调性。n容易证明,当k 0 时,w(x,i+k)-w(x,i)随x单调不减,w(i+k,x)-w(i,x)随x单调不减。n所以对任意的a b c d,有w(a,d)+w(b,c)w(a,c)+w(b,d)。称此不等式为四边形不等式。n由四边形不等式也可推出凸完全单调性,所以“w 满足四边形不等式”与“w具有凸完全单调性”这两种说法是等价的。四边形不等式、凸完全单调性与决策单调性n在一类要求将一段序列划分为若干子段,从i到j的一段的费用为w(i,j),要求出所有子段代价之和最小的划分方案的动态规划问题中,通常可以见到这样的状态转移方程:n设t(i,x)=fi+w(i,x),如果对于某个x,t(i,x)t(j,x)(i x,有t(i,y)t(j,y)。此式说明,对于i j,一旦某个时刻决策i没有决策j好,以后决策i也不会比决策j好。这说明,fx 的决策是随x单调不减的,这就是决策的单调性。1:),(minxixiwifxf四边形不等式、凸完全单调性与决策单调性n解决这类问题时,通常用Bi记录使决策i比所有之前的决策j(j i)要好的最小的x,即Bi=minx:t(i,x)t(j,x)对所有j i均成立。n根据决策的单调性,决策i比所有之前的决策j(j i)要好等价于Bi x。n如果对某个(i,j)(i j),Bi Bj,则说明决策i是无用的。n于是任何时刻,假设所有有用决策为 i1,i2,ik,满足i1 i2 ik,则Bi1 Bi2 Bik。四边形不等式、凸完全单调性与决策单调性n求解fx时,如果j=maxj:Bij x,j k,则此时决策ij一定是最好的,即fx=t(ij,x)。利用决策的单调性,这个j可以接着上次查找,所以n次找j的时间复杂度为O(n+决策序列长度)=O(n)。n在求出了fx 之后,x将成为一个有用决策,我们需要求出Bx,以及维护这个决策序列。四边形不等式、凸完全单调性与决策单调性n假设可以在T单位时间内求出y=miny:t(x,y)t(ik,y)。n那么如果y Bik,一定有Bx Bik。于是ik是无用决策,这时应当在决策序列中删去这个ik(只需要让k k-1)。继续这个过程,直到miny:t(x,y)Bik。此时,Bx=y(因为不可能再小),并且x应当被添加到这个决策序列的末尾。n容易发现,用栈可以很好的完成这个序列的维护,由于每个决策至多进出栈一次,每个决策出栈至多消耗T单位时间,于是维护序列的时间复杂度是O(nT)。又因为决策的单调性,查找合适决策的时间复杂度是O(n)的,所以总的时间复杂度是O(nT)。四边形不等式、凸完全单调性与决策单调性n有时,因为函数w的表达式便于求出miny:t(x,y)t(ik,y),所以T=O(1);一般情况下,根据w的凸性可以得到t(x,y)-t(ik,y)关于y单调不增,于是可以在O(log n)时间内用二分的方法求出y,此时T=O(log n)。所以如果函数w是凸的,那么这种动态规划问题最坏可以在O(nlogn)时间内求解;最好时,可以在O(n)时间内求解,可见这种方法是非常高效的。n然而,此种动态规划模型单一,对w的限制有时又难以满足,所以应用范围也较为狭窄。但其思想是值得借鉴的。凸完全单调性的一个加强n假设我们要维护一个广义(不局限于动态规划问题)决策序列i1,i2,ik,满足i1 i2 ik,存在函数g和h,满足在选取有关x的最优决策时,决策i不如决策j(i j)等价于g(i,j)h(x)。n此时,决策仍然具有单调性,不过这不是关于x单调,而是关于h(x)单调。类比上面的知识,容易知道,这里维护的决策序列满足n为了方便,我们记i0=nil。则g(ik-1,ik)g(ik,ik+1)。)()()nil(1211kk,iig,iig,ig-凸完全单调性的一个加强n我们需要在这个序列上进行查找最小的j,满足h(x)i2 il,g(i0,i1)g(i1,i2)Sx,则 。由于Sx在的计算过程中是单调增的(按照x从大到小的顺序计算),我们只需要接着上次向后查找,于是这n次查找的总时间复杂度为O(n)。n计算出dk之后,我们需要建立一个决策序列供下一阶段选择。我们按照从大到小的顺序将这些候选决策加入决策序列。假设某个时刻决策序列为i1,i2,ik,i1 i2 il,此时要将x(il x)添加到决策序列中。我们比较g(il1,il)与g(il,x)的大小,如果g(il,x)g(il1,il),就删去决策il(令l l 1),继续这样的比较直到g(il1,il)g(il,x),最后再将x 放到决策序列的末尾。xixiSPTUxkdjj1,-选取适当的h(x)加速算法n容易看出,这是一个栈维护的问题。因为g的计算是O(1)的,所以整个过程的时间复杂度是O(n)。n综上,每个阶段的计算是O(n)的,一共有k个阶段,故总的时间复杂度为O(kn)。n对比这个方法与直接利用凸完全单调性的方法可以发现,直接利用凸完全单调性的方法实际上是在求出了g(i,j)之后,用二分的方法求出了最小的满足g(i,j)Sx的x。而这是完全没有必要的。如果w 本身是凸的,通过选择合适的h(x)(这里h(x)=Sx),那么这个h(x)与x一定具有相同的单调性,这不会影响查找的总时间,而计算g的复杂度由O(log n)降到了O(1),这就将维护决策序列时间复杂度从O(n log n)降到了O(n),从而提高的算法的效率。用于解决一些权函数不具有凸完全单调性的问题n在刚才的例题中,这个方法只是扮演着优化的角色,并没有质的改变。下面,我们将利用这个方法解决一个权函数不满足四边形不等式的题目。n例2(石阶)水平面上有个高度为h 的高台,你需要用n(n 1000)块石块修建一个石阶,从这个高台通往地面。第i 个石阶的高度为hi。由于一些限制,你从高台出发,并且只能顺次处理每块石块,你要么将当前的石块摞在你前方的那一列,要么走到前方的那一列。在修建石阶的过程中你不能向回走。n为了让这个石阶不至于太单调,你希望这个石阶有所起伏,所以你希望将这n个石块都用上。为了让这个石阶安全可用,你希望相邻两列高度之差的最大值(视高台为第0列,地面为最后一列)尽可能小。也就是说,你需要将这n个石块分成若干段,假设你将他们分成了k段,则每段的高度为这段所有石块的高度总和。假设第i 段的高度为ti,t0=h,tk+1=0。你的目标就是选择一个合适的分段,来最小化 。|max10-iikitt用于解决一些权函数不具有凸完全单调性的问题n设h0=h,hn+1=0,dk,x为将石块0到石块x分成若干段,最后一段为石块k到石块x的方案中,相邻两段高度差的最小值。设si=h0+hi,diff i,k,x=|sx 2sk1+si1|,则ndn+1,n+1就是所求答案。-时当时当时当110:),1,minmax(000,nxkkixkidiffkidxkxkxkd用于解决一些权函数不具有凸完全单调性的问题n这里,我们按照k从小到大,x从小到大的顺序计算dk,x。我们需要维护n+1个决策序列,第k个决策序列存储di,k 1,其中i作为决策量。我们考察决策i比决策j更好的条件,以确定决策序列的各决策的序以及维护方法。n设h(x)=sx 2sk1,则决策i比决策j(i j)好等价于)1,|,)(max(|)1,|,)(max(|11-kjdsxhkidsxhji用于解决一些权函数不具有凸完全单调性的问题n容易发现,如果h(x)足够大,那么此式一定不成立。我们考察这类不等式的解集。考虑函数f1(x)=max(|x+a1|,b1),f2(x)=max(|x+a2|,b2)。这里a1 a2,但b1、b2 间没有必然的大小关系。则这两个函数间可能有以下几种关系:用于解决一些权函数不具有凸完全单调性的问题用于解决一些权函数不具有凸完全单调性的问题n在图中我们可以看到,f1(x)f2(x)的解集一定是x g(a2,b2,a1,b1)。故决策i比决策j(i j)好等价于n简写为h(x)g(j,i)。这里g是可以在O(1)时间内求出的。)1,1,()(11-kidskjdsgxhij用于解决一些权函数不具有凸完全单调性的问题n所以我们维护的每个决策序列中的决策应当满足:n查找决策时,应当找到最大的j,满足h(x)g(ij1,ij)。因为h(x)=sx 2sk1关于x单调增,我们可以接着上次向前查找,所以总的查找时间为O(n)。n维护序列时,由于dk,x是按照k从小到大计算的,新的决策一定是被追加到决策序列的末尾,所以只需要反复比较g(il1,il)与g(il,k),删去序列的末尾决策直到满足g(il1,il)g(il,k),最后将k追加到决策序列的末尾。liiii210nil),(),(),(12110lliigiigiig-用于解决一些权函数不具有凸完全单调性的问题n这样,我们就得到了这个题目的O(n2)时间复杂度的解法。n这个题目中,f2(x)-f1(x)并不一定是单调增的,也就是权函数并不具有凸完全单调性,但我们还是利用这个方法解决了这个问题。其原因在于,我们利用的只是决策的单调性,并不需要在意是哪个具体的性质造成的这种单调性。对权函数要求过高,这便是凸完全单调性的局限,为一个不难达到的目的付出了过多的代价。合理的序与维护方向n上面两个例子,尤其是例2,向我们展示了这种方法的灵活性。动态规划的方程并不像第一节中的那么死板,也并不只有一个决策序列,决策的添加顺序也没有固定的要求。一个决策甚至可以被加入多个决策序列!(但不能太多,否则就与动态规划的本质与维护决策的最终目的背道而驰;当然,在例2中并未出现此情况)然而,解决动态规划问题只是此类方法的一部分,此类方法还可以解决更为宽泛的问题。合理的序与维护方向n例3(经典问题)要求维护一些不与y轴平行的直线,为了方便,初始时只有一条直线y=。每次要么添加一条直线y=kx+b,要么询问x=k 与这些直线的最低交点的坐标。假设询问的次数为q,直线的条数为n,请给出一个O(n+q)log n)的算法。n假设第i条直线为y=kix+bi。考虑何时直线i不如直线j好。显然,这等价于 但由于ki-kj的正负不确定,所以无法继续变形下去。xkkbbbxkbxkjijijjii)(-合理的序与维护方向n回顾决策序列的维护过程,可以发现,此方法并没有对决策的顺序作任何显式的要求,只要求决策满足:n回顾前两个例题可以发现,决策的顺序恰恰是暗含在函数g中的。)(),(xhjigji不如决策决策合理的序与维护方向n在本题中为了得到g(i,j)h(x),我们可以要求ki kj。这样就得到了一个合适的序。有了这个序,我们就可以得到:n即h(x)=x,-时当时当时当不如决策决策ijjiijjijijiijbbkkxbbkkxkkxkkbbji,-时当时当时当ijjiijjijijiijbbkkbbkkkkkkbbjig,),(合理的序与维护方向n假如我们维护了一个决策序列i1,i2,il,满足ki_1 ki_2 ki_l,-=g(nil,ki_1)g(ki_1,ki_2)g(ki_(l-1),ki_l)n回答询问时,只要在这个序列中找最大的j,满足g(ij-1,ij)x。则所求交点一定在直线ij上。n插入新直线时,由于这条直线并不一定是斜率最小的直线,所以我们不能在决策序列的末尾添加这个决策,而是要根据这条直线的斜率来决定是在开头还是中间还是末尾来维护这个序列。为了使算法描述尽可能地简洁,我们视序列的开头和结尾为一种退化了的中间。n假设ki_j kn ki_(j-1),我们可以用类似栈维护的方法删去前面不需要保留的决策。假设这个时候n前方的决策变成了ij,我们比较g(ij,x)与g(x,ij+1)来判断决策n是否需要保留。如果需要保留,这时有可能g(n,ij+1)g(ij+1,ij+2),那么决策ij+1不需要被保留,删去决策ij+1,再判断决策ij+2是否不需要被保留。如此操作直到不需要删除决策为止。合理的序与维护方向n容易知道,平衡树可以在O(log n)的时间内求前驱、后继,查找最大的不超过h(x)的元素。因为每次插入新的决策只需要进行均摊O(1)次操作(可用类似于栈维护的方法证明),所以维护序列的总时间是O(nlogn)的。回答询问的总时间是O(qlogn)的。所以总时间复杂度就是O(n+q)logn)的。n值得一提的是,只要对这个算法稍加改变,就可以在O(nlogn+输出规模)的时间内解决在线半平面交的问题,因为我们计算出的g恰好就是这些直线组成的最低折线上的转折点。n虽然这种方法可以高效处理从中间维护决策序列的情况,但毕竟平衡树操作的常数因子不小,如果可以只在两头维护序列,就只需要用栈来维护,程序效率会大大提高。合理的序与维护方向n考虑离线半平面交问题,给出n个二元一次方程Ax+By C,求出可行域。我们只考虑这个问题的关键步骤:给出一些直线y=kx+b,求出最低的一条折线(显然这是上凸的)。n由于最终的结果与处理直线的顺序无关,我们先将这些直线按照k从大到小排序,然后应用上面的方法。这时,这些“决策”的插入过程中,只需要从序列的尾部维护,这个操作用栈就可以高效的完成。最后剩下的“决策”就是按照从左到右顺序的最低折线,而相邻两“决策”间的g,就是这些折线交点的横坐标。排序之后的这些操作,其时间复杂度总计O(n)。n这个几何问题,我们甚至没有画一张图,就用这种方法在O(nlogn)的时间内高效的解决了。而算法效率的瓶颈是一开始的排序,如果排序可以在O(n)时间内完成,或者直线就是按斜率从大到小或斜率从小到大的顺序给出,那么此方法的时间复杂度就是O(n)。这足以说明此方法更应该被作为一种思想来看待。合理的序与维护方向n例4(USACO JAN07 schul)要求维护一些不与y轴平行的直线。每次要么添加一条直线y=kx+b,要么询问当x=p与这些直线的所有交点中的纵坐标的最小的点。保证每条直线的斜率大于0,并且新加直线的横截距-b/k比原来的直线的横截距都大。并且保证每次询问的p总比最大横截距大。n由于直线并不是按照斜率递增或递减的顺序添加的,使用上面的方法只能得到O(n+q)logn)的算法,而对于本题的数据,这个算法虽然比O(qn)的方法快了很多,但还是很慢。n我们不妨再仔细分析一下题目特点,按顺序将每条直线假如决策序列会怎样呢?n直线i比直线j(i ki时,这等价于 ;当kj ki时,这等价于 ,然 而由于左边不大于最大横截距,而这个问题又保证每次询问的x大于最大横截距,所以这个条件等价于 x !xkkbbbxkbxkijijjjii)(-xkkbbijij-xkkbbijij-合理的序与维护方向n这样,我们就得到了一个合适的函数g(i,j),以及一个便于处理的序,这个序恰好就是直线插入的顺序。n所以这个问题就被转化为一个普通的栈维护问题,由于这个序列的维护方法已经在例2中给出,这里不再赘述。n这样,我们就在O(n+q)的时间解决了这个问题。n而解决这个问题的关键是:有些结论虽然在全局并不成立,但在某个具有更多限制的局部内却可以满足。所以我们要充分利用题目特点,找到最适合的序,这个序有时就是以这个特殊的局部内的某些性质为基础的。最优决策的查找方式 n当这个决策序列是使用栈在两头维护时:如果h(x)单调增或单调减,则可以利用这个单调性接着上次查找,在O(n+q)时间内回答所有询问,如果这个h(x)的反复次数不多(例如凸等),也可以用接着上次查找的方法,其时间复杂度为O(|ans1-ans2|+|ans1-ans2|+|ansq-1-ansq|)。如果这个h(x)的变化很不规律,则可以用二分查找的方法在O(q log n)时间内回答所有询问。n当这个决策序列是从中间维护时,由于使用了平衡树,我们也只能用平衡树上的查找方法。n相比之下,从中间维护决策序列无论是从决策的维护还是最优决策的查找,都有很大劣势,我们应当尽量避免(寻找适合的序)。选择合适的规划方向 n例5(旅行)一条铁路线上有N个城市,顺序编号为1,2,N,TT希望从城市1到城市N。从城市i出发只能到达后面的某个点j,需要花费(j-i)Ai的车票费与Bj元的检票费。TT想知道从城市1出发到城市N所需要的最少花费。n假设di为从城市1到城市i所需的最小费用,则n决策i不比决策j(i j)等价于n这时,我们可以按处理顺序在决策序列末尾维护决策,这样只需要用栈就可以维护决策序列。在查找最优决策的时候,只需要使用二分查找的方法,就可以在O(nlogn)时间内解决此问题。n虽然这个方法与上个方法具有一样的理论时间复杂度,但由于栈维护和二分查找相对于平衡树的常数因子非常小,在实践中,这个方法相比上个方法存在很大优势。:)(minnixBAxiidxdix-jxixBAxjjdBAxiid-)()(xijAjiBidBjd-事先除去无用状态以获得合适的序 n在上个问题中,如果令Bi=0,这个题目就可以很容易的用贪心算法解决,其时间复杂度是O(n)的。n在这个特殊情况下,能否再进行一些优化来改进这个方法呢?答案是肯定的。n考虑这个题的贪心算法:如果当前车站的Ai更小,那么就在这里倒车,直到到达城市N。也就是说,决策序列中的Ai是单调减的。n然而,对刚才的方法稍加分析,可以发现,有用的决策并不一定满足这个条件。因为我们计算了大量无用di!这些di不会作为以后的可行决策,但是为了计算它们,我们不得不使用一个更差的决策序列,或者不得不使用一种更差的最优决策的查找方法。事先除去无用状态以获得合适的序 n所以我们要事先知道哪些决策是无用的。假设di是从车站1到车站i的最小花费。且di=dj+(i-j)Aj。则决策i比决策j好等价于n于是在这个问题中,任何时候决策序列中实际上只有一个决策,所以这个修改过的动态规划与贪心几乎没有区别了,可谓是殊途同归。jijiAAAjxjdAixid-)()(事先除去无用状态以获得合适的序 n例6(Balkan OI2003 欧元)将一个由n个数组成的数列划分为若干段,设前i个数的和是si,如果一段是从第i个数到第j个数,那么这段的权值是(sj-si)j-T(T 0),求出一个权和最大的划分。n设di为从第1个数到第i个数的权值最大的划分。则n决策i不如决策j(i si_(k+1)。于是刚才的方法实际上只用在序列的末尾进行维护,于是程序的时间复杂度就降到了O(N)。第三部分总结n从上面的讨论可以看出,凸完全单调性的这个加强中函数g和h的出现带来了很大的灵活性,不仅可以用来加速求解权函数本身就凸的情形,还可以解决权函数并不凸的形式,而且其应用也不仅限于动态规划问题。n维护决策序列,更应当被看作一种思考问题的方法。谢谢大家!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!