差分约束系统
2015-10-13 01:08
169 查看
差分约束系统
总结近两天的学习,真是吐血三升,尤其あなたを想っている。。。日语好高大上。。
首先引出差分约束系统的定义
引自百度百科。。。如下
如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。
接下来开始分析如何转化为图论问题
首先是>=问题求解方法(详细论述)对于一组不等式(1)
x1-x0>=w(0,1);
x2-x1>=w(1,2);
x3-x2>=w(2,3);
x4-x3>=w(3,4);
求x0~x4的最小值。
显然 上述不等式组(1)变形得
不等式组(2)
x1>=x0+w(0,1);
x2>=x1+w(1,2);
x3>=x2+w(2,3);
x4>=x3+w(3,4);
我们定义w(i,j)为从第i个点到第j个点的边权,那么我们可以理解为从第i个点到第j个点的最近值,正好是最长路进行“松弛操作”
也即
if dist[j]< dist[i]+w[i,j] then dist[j]:=dist[i]+w[i,j];
即j的权值即为由第i个点恰好走最低限度的要求需要的j的值是多少。由此,我们可以得出只要这条路能走,那么j的值必然是在约束条件下的取值的极小值,因为j的值是由i按照约束条件的最低限度而转移出来的,正确性显而易见,只要走这条路得出的值必然是每个点所能取到的最小值。再根据上述的“松弛操作”即可得出从求出不等式组(1)的最小的一组解。当不等式之间出现相互约束,时该组不等式组无解,因为嘉定如下不等式组(3)
x2-x1>=w(1,2)
x1-x2>=w(2,1)
这显然是无解的
因为
既要求x2比x1大w(1,2)又要求x2比x1大w(2,1)
Obviously,(突然地高大上,(^__^) 嘻嘻……)
当x1取到某个值,x2必须至少比x1大w(1,2);
当x2取到某个比x1大w(2,1)时又要求x1必须至少比x2大w(2,1)
显然 x1出现两个值,矛盾,由此得出无解。
说明
(解该不等式组要求w值均为非负值,由定义也可以推知,不能出现负值,因为当a比b大一个负值时,即b比a小一个正值。不等号方向便被改变。除非认为是绝对值即认为是距离才可以,那么就认为大于负值其实是小于负值,只是绝对值差要大这个值。转化为大的比小的大一个负值的相反数)。
至此将不等式组(1)转化为一张图求最长路来解得该组不等式组的充分性成立
即
满足不等式组(1)的最小解=>图中的最长路
只要走图中的这条路,必须按照约束条件来给下一个点赋值,而这个值又是按照约束条件的最低限度来赋的其值必然是最小解;
当求最长路时出现正环时显然无解。对应上述不等式组(3)
至此对于形如不等式组(1)的解决方法论证完毕。
总结
当有一组形如x-y>=z的一组不等式时可以由其建立起一张约束图,然后在这张图上跑最长路;自然语言描述具体实现办法
因为首先不知道这张图是否为连通的,避免图不连通的情况出现,那么我们可以设置一个”超级源点”(引自多个博客的说法);
根据题设条件将源点与所有约束图中的点连边;
例如 题中要求所有边非负
如下
xi-x0>=0
由此便可得出从源点向每条边连出一条边权为0的边
要求为大于0
即xi-x0>0
其形式不符合标准式,无法转化为约束图中的点,那么由于差分约束研究的是整数问题,那么该约束条件可以转化为
xi-x0>=1
这样就可以连出从x0到xi的边权为1的边。
跑SPFA (+SLF,LLL) 求出最长路即可。由此边求出了在约束条件下的最小解。
关于<=问题求解最大解
解决方法类似,只是全部转化为<=的形式然后跑最短路即可总结(不详加展开,请自行论证(脑补))
同样x2-x1<=w(1,2)有x2<=x1+w(1,2)即
if dist[x2]>dist[x1]+w(1,2)
then dist[x2]:=dist[x1]+w(1,2)
由此在约束条件下每次都是约束条件允许的最大范围中取值,由此便易推知,当跑最短路时得出的为满足约束条件的最大解。
同样的,在有负环时无解。即既要求x2比x1小w(1,2)有要求x1比x2小w(2,1)同样推出矛盾。
综上所述
当=型 求其满足约束条件的最小解==>建图求最长路
<= 型 求其满足约束条件的最大解==>建图求最短路
无论如何都是由减数指向被减数连边且必须化成标准式,否则开区间无最值,必须等号成立。
代码明天补上。
鸣谢(万分感激教导(附带、超链接))
Void-man
xuezhongfenfei 生活总是要微笑着面对~
有间博客
特别鸣谢
奥神t14t41t 神犇的指导,快被我气炸的说。。。
ametake。。。没啥说的。。。
半夜写博客好困。。。
!
国风·卫风·氓
氓之蚩蚩,抱布贸丝。匪来贸丝,来即我谋。送子涉淇,至于顿丘。匪我愆期,子无良媒。
将子无怒,秋以为期。
乘彼垝垣,以望复关。不见复关,泣涕涟涟。
既见复关,载笑载言。尔卜尔筮,体无咎言。
以尔车来,以我贿迁。
桑之未落,其叶沃若。于嗟鸠兮,无食桑葚!
于嗟女兮,无与士耽!士之耽兮,犹可说也。
女之耽兮,不可说也。
桑之落矣,其黄而陨。自我徂尔,三岁食贫。
淇水汤汤,渐车帷裳。女也不爽,士贰其行。
士也罔极,二三其德。
三岁为妇,靡室劳矣;夙兴夜寐,靡有朝矣。
言既遂矣,至于暴矣。兄弟不知,咥其笑矣。
静言思之,躬自悼矣。
及尔偕老,老使我怨。淇则有岸,隰则有泮。
总角之宴,言笑晏晏。信誓旦旦,不思其反。
反是不思,亦已焉哉!
翻译(醉了。。。)
无知农家小伙子,怀抱布匹来换丝。其实不是真换丝,找此借口谈婚事。
送你渡过淇水西,到了顿丘情依依。不是我要误佳期,你无媒人失礼仪。
希望你不要生气,我们以秋天为期。
登上那堵破土墙,面朝复关凝神望。复关遥远不得见,心里忧伤泪千行。
情郎忽从复关来,又说又笑喜洋洋。你去卜卦问吉祥,卦象吉祥心欢畅。
赶着你的车子来,把我财礼往上装。
桑树叶子未落时,挂满枝头绿萋萋。唉呀那些斑鸠呀,别把桑叶急着吃。
唉呀年轻姑娘们,别对男人情太痴。男人要是迷恋你,要说放弃也容易。
女子若是恋男子,要想解脱不好离。
桑树叶子落下了,又枯又黄任飘零。自从嫁到你家来,三年挨饿受清贫。
淇水滔滔送我归,车帷溅湿水淋淋。我做妻子没差错,是你奸刁缺德行。
做人标准你全无,三心二意耍花招。
婚后三年为你妇,繁重家务不辞劳。早起晚睡不嫌苦,忙里忙外非一朝。
你的目的一达到,逐渐对我施凶暴。兄弟不知我处境,个个见我都讥笑。
静下心来想一想,独自黯然把泪抛。
白头偕老当年誓,如今未老生怨愁。淇水滔滔终有岸,沼泽虽宽有尽头。
回想少时多欢聚,说笑之间情悠悠。