算法总结与---差分约束系统.docVIP

  • 3
  • 0
  • 约6千字
  • 约 8页
  • 2017-05-20 发布于浙江
  • 举报
算法总结与---差分约束系统

Contents 定义 二、 详解 三、 例题 定义(百度百科): 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。 求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。 观察xj-xi=bk,会发现它类似最短路中的三角不等式d[v]=d[u]+w[u,v],即d[v]-d[u]=w[u,v]。因此,以每个变量xi为结点,对于约束条件xj-xi=bk,连接一条边(i,j),边权为bk。我们再增加一个源点s,s与所有定点相连,边权均为0。对这个图,以s为源点运行Bellman-ford算法(或SPFA算法),最终{d[ i]}即为一组可行解。 例如,考虑这样一个问题,寻找一个5维向量x=(xi)以满足: 这一问题等价于找出未知量xi,i=1,2,…,5,满足下列8个差分约束条件: x1-x2≤0 x1-x5≤-1 x2-x5≤1 x3-x1≤5 x4-x1≤4 x4-x3≤-1 x5-x3≤-3 x5-x4≤-3 该问题的一个解为x=(-5,-3,0,-1,-4),另一个解y=(0,2,5,4,1),这2个解是有联系的:y中的每个元素比x中相应的元素大5。 引理:设x=(x1,x2,…,xn)是差分约束系统Ax≤b的一个解,d为任意常数。则x+d=(x1+d,x2+d,…,xn+d)也是该系统Ax≤b的一个解。 bellman-ford算法伪代码: for each v ?V do d[v] -- 无限大; d[s] -- 0 Relaxation for i =1,...,|V|-1 do for each edge (u,v) 属于 E do d[v] -- min{d[v], d[u]+w(u,v)} Negative cycle checking for each v 属于V do if d[v] d[u] + w(u,v) then no solution 在实际的应用中,一般使用SPFA(Shortest Path Fast Algorithm)算法来实现。 差分约束系统中源点到每个点的距离确定 关于Dist[]的初始化化 1.如果将源点到各点的距离初始化为0,最终求出的最短路满足 它们之间相互最接近了 2.如果将源点到各点的距离初始化为INF(无穷大),其中之1为0,最终求出的最短路满足 它们与该点之间相互差值最大。 3.差分约束系统的确立要根据自己确定的约束条件,从约束点走向被约束点 连边一般有两种方法,第一种是连边后求最长路的方法,第二种是连边后求最短路的方法。 例:d[x]-d[y]=Z 如果想连边后求最长路 那么将不等式变形为这种形式 d[x]=d[y]+z y---x连一条权值为z的边 求最短路则变形成d[y]=d[x]-z x---y连一条权值为-z的边。 如果是别的不等式,也可以根据情况变形。但是要保证的是 两个变量(x,y)的系数一定要是正的。而常量则不一定。 定理:将如上差分约束系统 转换成图后,以 为源点得到的最短路径序列为 (如果有解),则 满足 且若 为 任意解,则有 。 证明:首先由 ,则显然有 满足 ,这是因为每条边对应一个不等式且由图的构造法可知。其次考察 到 的最短路径 ,我们有 与 直接相连且由路径最短知 ,其中 为不等式 的常量即为边 的权,所以有 。对k做归纳,由 ,又 ,所以 即 所以后者成立。证毕 例:设有n个盒子标号为1...n,每个盒子最多放1个球。放法满足 (0i≤m)约束,其中 表示区间 最多可放 个球,求这n个盒子最多可放多少个球。[1] 令前k个盒子放的数目为 ,则有 , (1 ≤?i?≤?n?), (1 ≤?i?≤?m)。以此约束条件用如上算法给出最短路径序列 ,由定理知 是合法的放法,且 为最大值。 引自某网友: (本文假设读者已经有以下知识:最短路径的基本性质、Bellman-Ford算法。)? ??? 比如有这样一组不等式:? ??? X1 - X2 = 0? X1 - X5 = -1? X2 - X5 = 1? X3 - X1 = 5? X4 - X1 = 4? X4 - X3 = -1? X5 - X3 = -3? X5 - X4 = -3? 不等式组(1)? ??? 全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。? ??? 这个不等式组要么无解,要么就有无数组解。因为如果有一组解{X1, X2, ..., Xn}的话,那么对于任何一个常数k

文档评论(0)

1亿VIP精品文档

相关文档