Route
Contact huatihui
2024-11-19 11:00:39
华体会,华体会体育,华体会体育官网,华体会靠谱吗,华体会APP(访问: hash.cyou 领取999USDT)
更进一步的,我们只要找出满足B[a, h]B[b, h]的最小的h,就可以免去h之后对第a列的计算。而这样的h,我们可以用二分查找法在O(log n)时间内找到(若w更特殊一些,例如说是确定的函数,我们甚至可以在O(1)的时间找到)。并且对于每一行来说,都只需要执行一次二分查找。在求出所有的h之后,只需用O(n)的时间对每列的第h行求值就可以了。这样得出的总时间为O(n)O(n log n)= O(n log n)。至于程序设计上的问题,虽然并不复杂,但不是15分钟所可以解决的,也不是重点,略过不谈。[2]不过由于该题目可以用滚动数组的技巧解决空间的问题,故在大数据量时该算法有优异的表现。
[3]我们知道,动态规划实际是求无向图的最短路的一种方法,故我们可以把动态规划中的每一个状态看成一个点,并将状态的转移过程变为一个图。在转化为最小费用最大流时,我们把这一个点拆成两个点,一个出点和一个入点,所有指向原来这个点的边都与入点相连,且所有由原来这个点发出的边现都以出点为起点。原来的边的容量设为正无穷,边权值一般不变。新增的入点与出点之间连一条边,它的权值为点权值,容量为每一点可以经过的次数(一般为一)。并且建立一个超级源和一个超级汇,并与可能的入点和出点连边。若有必要,超级源(或汇)也要拆成两个点,并且两个点之间的边的容量为最大的可能容量,边权值为0。这样,用最小费用流的方法得出的解就是该问题多维情况下的接。
对于模型的转化方法,我们有一些一般的规律。若状态转移方程只与另一个状态有关,我们可以肯定得到一个最小费用最大流的模型[3]。这个模型必然有其规律的地方,甚至用对偶算法在对网络流的求解时也还要用到动态规划的方法。不过这不是重点,我们关心的只是动态规划问题如何转化。例如说IOI’97《火星探测器》一题。这一题的一维模型是可以用动态规划来解决的(这里的维数概念是指探测器的数目)。在维数增加时,我们就可以用该方法来用网络流的方法解决问题。
这样的问题比较复杂,我们以最长不下降子序列问题为例。规划方程为:f(i)=max{f(j)}1, d[i]≥d[j]; ij。通常认为,这个问题的最低可行时间复杂度为O(n2)。不过,这个问题只多了一个d[i]≥d[j]的限制,是不是也可以优化呢?我们注意到max{f(j)}的部分,它的时间复杂度为O(n)。但对于这样的式子,我们通常都可以用一个优先队列来使这个max运算的时间复杂度降至O(log n)。对于该问题,我们也可以用这样的方法。在计算d[i]时,我们要先有一个平衡排序二叉树(例如红黑树)对d[1]~d[i-1]进行排序。并且我们在树的每一个节点新增一个MAX域记录它的左子树中的函数f的最大值。这样,我们在计算f(i)时,只需用O(log n)时间找出不比d[i]大的最大数所对应的节点,并用O(1)的时间访问它的MAX域就可以得出f(i)的值。并且,插入操作和更新MAX域的操作也都只用O(log n)的时间(我们不需要删除操作),故总时间复杂度为O(n log n)。实际运行时这样的程序也是十分快的,n=10000时用不到1秒就可以得出结果,而原来的程序需要30秒。
在这样的情况下,我们可以用g(XT)= opt{g(Pred(XT)), f(Pred(XT))}这样一个方程式来求出g(XT)的值,并再用g(XT)的值求出f(XT)的值。这样,虽然我们相当于对g(XT)和f(XT)分别作了一次动态规划,但由于两个规划是同时进行的,时间复杂度却降为了O(nt)。由于我们在实际使用中的前趋即通常都是连续的,故这个方法有很多应用。例如IOI’99的《小花店》一题就可以用该方法把表面上的时间复杂度O(FV2)降为O(FV)。
搜索您想要找的内容!
地址:华体会- 华体会体育- 华体会体育官网 电话:@HASHKFK 手机:@HASHKFK
Copyright © 2012-2024 华体会体育户外滑雪培训设备有限公司 版权所有 非商用版本 ICP备案编号: