差分約束系統詳解

在一個差分約束系統(system of difference constraints)中,線性規劃矩陣A的每一行包含一個1和一個-1,A的其他所有元素都爲0。因此,由Ax≤b給出的約束條件是m個差分約束集合,其中包含n個未知量,對應的線性規劃矩陣A爲m行n列。每個約束條件爲如下形式的簡單線性不等式:xj-xi≤bk。其中1≤i,j≤n,1≤k≤m(mxn的矩陣表示有m行,也就是有m個約束條件;每行n個元素,也就是一共有n個變量)

例如,考慮這樣一個問題,尋找一個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的一個解。

 

約束圖

   在一個差分約束系統Ax≤b中,m X n的線性規劃矩陣A可被看做是n頂點,m條邊的圖的關聯矩陣。對於i=1,2,…,n,圖中的每一個頂點vi對應着n個未知量的一個xi。圖中的每個有向邊對應着關於兩個未知量的m個不等式中的一個。

   給定一個差分約束系統Ax≤b,相應的約束圖是一個帶權有向圖G=(V,E),其中V={v0,v1,…,vn},而且E={ (vi,vj) : xj-xi≤bk是一個約束}∪{ (v0,v1) , (v0,v2) , … , (v0,vn) }。引入附加頂點v0是爲了保證其他每個頂點均從v0可達。因此,頂點集合V由對應於每個未知量xi的頂點vi和附加的頂點v0組成。邊的集合E由對應於每個差分約束條件的邊與對應於每個未知量xi的邊(v0,vi)構成。如果xj-xi≤bk是一個差分約束,則邊(vi,vj)的權w(vi,vj)=bk(注意i和j不能顛倒),從v0出發的每條邊的權值均爲0。

  
定理:給定一差分約束系統Ax≤b,設G=(V,E)爲其相應的約束圖。如果G不包含負權迴路,那麼x=( d(v0,v1) , d(v0,v2) , … , d(v0,vn) )是此係統的一可行解,其中d(v0,vi)是約束圖中v0到vi的最短路徑(i=1,2,…,n)。如果G包含負權迴路,那麼此係統不存在可行解。

 

差分約束問題的求解

比如給出三個不等式

b-a<=k1,

c-b<=k2,

c-a<=k3,

求出c-a的最大值,我們可以把a,b,c轉換成三個點,k1,k2,k3是邊上的權,如圖

由題我們可以得知,這個有向圖中,由題b-a<=k1,c-b<=k2,得出c-a<=k1+k2,因此比較k1+k2和k3的大小,求出最小的就是c-a的最大值了

根據以上的解法,我們可能會猜到求解過程實際就是求從a到c的最短路徑,沒錯的....簡單的說就是從a到c沿着某條路徑後把所有權值和k求出就是c -a<=k的一個推廣的不等式約束,既然這樣,滿足題目的肯定是最小的k,也就是從a到c最短距離...

   由上述定理可知,可以採用Bellman-Ford算法對差分約束問題求解。因爲在約束圖中,從源點v0到其他所有頂點間均存在邊,因此約束圖中任何負權迴路均從v0可達。如果Bellman-Ford算法返回TRUE,則最短路徑權給出了此係統的一個可行解;如果返回FALSE,則差分約束系統無可行解。

   關於n個未知量m個約束條件的一個差分約束系統產生出一個具有n+1個頂點和n+m條邊的約束圖。因此採用Bellman-Ford算法,此外,可以用SPFA算法進行優化,複雜度爲O(km),其中k 爲常數。

http://www.cnblogs.com/pony1993/archive/2012/09/01/2666996.html

http://www.cnblogs.com/void/archive/2011/08/26/2153928.html

發佈了14 篇原創文章 · 獲贊 15 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章