【转】 差分约束系统详解(转化为最短路) (概念)
---恢復(fù)內(nèi)容開(kāi)始---
轉(zhuǎn)自:http://www.cnblogs.com/void/archive/2011/08/26/2153928.html
?
差分約束系統(tǒng)中:
?
如果求未知數(shù)的最大值,那么按小于等于建圖后求最短路即可。(因?yàn)榍笞疃搪肥怯蔁o(wú)窮向下約束而得到的,所以得到的一定是最大值)。
?
如果求未知數(shù)的最小值,那么按小于等于建圖后求最長(zhǎng)路即可。
?
注意所有數(shù)據(jù)的關(guān)系,不能漏掉關(guān)系,還有與附加源點(diǎn)的關(guān)系。
?
如果是按大于等于建圖:
?
求最大值,建圖后求最長(zhǎng)路;
?
求最小值,建圖后求最短路。
?
因?yàn)榇笥诘扔诮▓D后,相當(dāng)于未知數(shù)都 * -1了,所以求出結(jié)果后需要 * -1。
①:對(duì)于差分不等式,a - b <= c ,建一條 b 到 a 的權(quán)值為 c 的邊,求的是最短路,得到的是最大值?
②:對(duì)于不等式 a - b >= c ,建一條 b 到 a 的權(quán)值為 c 的邊,求的是最長(zhǎng)路,得到的是最小值?
③:存在負(fù)環(huán)的話(huà)是無(wú)解?
④:求不出最短路(dist[ ]沒(méi)有得到更新)的話(huà)是任意解?
一直不知道差分約束是什么類(lèi)型題目,最近在寫(xiě)最短路問(wèn)題就順帶看了下,原來(lái)就是給出一些形如x-y<=b不等式的約束,問(wèn)你是否滿(mǎn)足有解的問(wèn)題
好神奇的是這類(lèi)問(wèn)題竟然可以轉(zhuǎn)換成圖論里的最短路徑問(wèn)題,下面開(kāi)始詳細(xì)介紹下
比如給出三個(gè)不等式,b-a<=k1,c-b<=k2,c-a<=k3,求出c-a的最大值,我們可以把a(bǔ),b,c轉(zhuǎn)換成三個(gè)點(diǎn),k1,k2,k3是邊上的權(quán),如圖
由題我們可以得知,這個(gè)有向圖中,由題b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比較k1+k2和k3的大小,求出最小的就是c-a的最大值了
根據(jù)以上的解法,我們可能會(huì)猜到求解過(guò)程實(shí)際就是求從a到c的最短路徑,沒(méi)錯(cuò)的....簡(jiǎn)單的說(shuō)就是從a到c沿著某條路徑后把所有權(quán)值和k求出就是c -a<=k的一個(gè)
推廣的不等式約束,既然這樣,滿(mǎn)足題目的肯定是最小的k,也就是從a到c最短距離...
理解了這里之后,想做題還是比較有困難的,因?yàn)轭}目需要變形一下,不能單純的算..
首先以poj3159為例,這個(gè)比較簡(jiǎn)單,就是給出兩個(gè)點(diǎn)的最大差,然后讓你求1到n的最大差,直接建圖后用bellman或者spfa就可以過(guò)了
稍微難點(diǎn)的就是poj1364,因?yàn)樗o出的不等式不是x-y<=k形式,有時(shí)候是大于號(hào),這樣需要我們?nèi)プ冃我幌?#xff0c;并且給出的還是>,<沒(méi)有等于,都要變形
再有就是poj1201,他要求出的是最長(zhǎng)距離,那就要把形式變換成x-y>=k的標(biāo)準(zhǔn)形式
注意點(diǎn):
1. 如果要求最大值想辦法把每個(gè)不等式變?yōu)闃?biāo)準(zhǔn)x-y<=k的形式,然后建立一條從y到x權(quán)值為k的邊,變得時(shí)候注意x-y<k =>x-y<=k-1
?? 如果要求最小值的話(huà),變?yōu)閤-y>=k的標(biāo)準(zhǔn)形式,然后建立一條從y到x的k邊,求出最長(zhǎng)路徑即可
2.如果權(quán)值為正,用dj,spfa,bellman都可以,如果為負(fù)不能用dj,并且需要判斷是否有負(fù)環(huán),有的話(huà)就不存在
?
?
?
轉(zhuǎn)自:http://www.cnblogs.com/pony1993/archive/2012/09/01/2666996.html
---恢復(fù)內(nèi)容結(jié)束---
在一個(gè)差分約束系統(tǒng)(system of difference constraints)中,線性規(guī)劃矩陣A的每一行包含一個(gè)1和一個(gè)-1,A的其他所有元素都為0。因此,由Ax≤b給出的約束條件是m個(gè)差分約束集合,其中包含n個(gè)未知量,對(duì)應(yīng)的線性規(guī)劃矩陣A為m行n列。每個(gè)約束條件為如下形式的簡(jiǎn)單線性不等式:xj-xi≤bk。其中1≤i,j≤n,1≤k≤m。
例如,考慮這樣一個(gè)問(wèn)題,尋找一個(gè)5維向量x=(xi)以滿(mǎn)足:
?
?
這一問(wèn)題等價(jià)于找出未知量xi,i=1,2,…,5,滿(mǎn)足下列8個(gè)差分約束條件:
x1-x2≤0
x1-x5≤-1
x2-x5≤1
x3-x1≤5
x4-x1≤4
x4-x3≤-1
x5-x3≤-3
x5-x4≤-3
????該問(wèn)題的一個(gè)解為x=(-5,-3,0,-1,-4),另一個(gè)解y=(0,2,5,4,1),這2個(gè)解是有聯(lián)系的:y中的每個(gè)元素比x中相應(yīng)的元素大5。
?
引理:設(shè)x=(x1,x2,…,xn)是差分約束系統(tǒng)Ax≤b的一個(gè)解,d為任意常數(shù)。則x+d=(x1+d,x2+d,…,xn+d)也是該系統(tǒng)Ax≤b的一個(gè)解。
?
約束圖
???在一個(gè)差分約束系統(tǒng)Ax≤b中,m X n的線性規(guī)劃矩陣A可被看做是n頂點(diǎn),m條邊的圖的關(guān)聯(lián)矩陣。對(duì)于i=1,2,…,n,圖中的每一個(gè)頂點(diǎn)vi對(duì)應(yīng)著n個(gè)未知量的一個(gè)xi。圖中的每個(gè)有向邊對(duì)應(yīng)著關(guān)于兩個(gè)未知量的m個(gè)不等式中的一個(gè)。
???給定一個(gè)差分約束系統(tǒng)Ax≤b,相應(yīng)的約束圖是一個(gè)帶權(quán)有向圖G=(V,E),其中V={v0,v1,…,vn},而且E={ (vi,vj) : xj-xi≤bk是一個(gè)約束}∪{ (v0,v1) , (v0,v2) , … , (v0,vn) }。引入附加頂點(diǎn)v0是為了保證其他每個(gè)頂點(diǎn)均從v0可達(dá)。因此,頂點(diǎn)集合V由對(duì)應(yīng)于每個(gè)未知量xi的頂點(diǎn)vi和附加的頂點(diǎn)v0組成。邊的集合E由對(duì)應(yīng)于每個(gè)差分約束條件的邊與對(duì)應(yīng)于每個(gè)未知量xi的邊(v0,vi)構(gòu)成。如果xj-xi≤bk是一個(gè)差分約束,則邊(vi,vj)的權(quán)w(vi,vj)=bk(注意i和j不能顛倒),從v0出發(fā)的每條邊的權(quán)值均為0。
??
定理:給定一差分約束系統(tǒng)Ax≤b,設(shè)G=(V,E)為其相應(yīng)的約束圖。如果G不包含負(fù)權(quán)回路,那么x=( d(v0,v1) , d(v0,v2) , … , d(v0,vn) )是此系統(tǒng)的一可行解,其中d(v0,vi)是約束圖中v0到vi的最短路徑(i=1,2,…,n)。如果G包含負(fù)權(quán)回路,那么此系統(tǒng)不存在可行解。
?
差分約束問(wèn)題的求解
???由上述定理可知,可以采用Bellman-Ford算法對(duì)差分約束問(wèn)題求解。因?yàn)樵诩s束圖中,從源點(diǎn)v0到其他所有頂點(diǎn)間均存在邊,因此約束圖中任何負(fù)權(quán)回路均從v0可達(dá)。如果Bellman-Ford算法返回TRUE,則最短路徑權(quán)給出了此系統(tǒng)的一個(gè)可行解;如果返回FALSE,則差分約束系統(tǒng)無(wú)可行解。
???關(guān)于n個(gè)未知量m個(gè)約束條件的一個(gè)差分約束系統(tǒng)產(chǎn)生出一個(gè)具有n+1個(gè)頂點(diǎn)和n+m條邊的約束圖。因此采用Bellman-Ford算法,可以再O((n+1)(n+m))=O(n^2+nm)時(shí)間內(nèi)將系統(tǒng)解決。此外,可以用SPFA算法進(jìn)行優(yōu)化,復(fù)雜度為O(km),其中k?為常數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/xuyanqd/p/8762762.html
總結(jié)
以上是生活随笔為你收集整理的【转】 差分约束系统详解(转化为最短路) (概念)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: websocket原理
- 下一篇: 需求改进与系统设计