差分約束系統學習筆記

2022-08-21 08:39:08 字數 1481 閱讀 3311

差分約束系統:

1.演算法用途:

解決形如這樣一組不等式:

\[\left\x_-x_\leq 0 \\ x_-x_\leq 1 \\ x_-x_\leq 1 \\ x_-x_\leq 5 \\ x_-x_\leq 4 \\ x_-x_\leq -1 \\ x_-x_\leq -3 \\ x_-x_\leq -3 \end\right.\]

這種不等式的特點是:

1.都是兩個數的差小於等於某個常數(當然大於等於也可以,因為兩邊同時乘以-1也可以化為小於等於的形式

)。2.要麼無解,要麼就有無限組解。

2.演算法與單源最短路徑的聯絡:

1.三角形不等式:

在單源最短路徑問題中,任意一條邊都滿足乙個三角形不等式:

\[dis[u]\leq dis[v]+len[u][v]\]

例:在上面這幅圖中,滿足

\[dis[3]\leq dis[2]+len[2][3]\]

2.差分約束系統也正好滿足於這個條件,所以可以用單源最短路徑來解決差分約束系統。

3.演算法實現步驟:

每個不等式的未知數都可以給它乙個節點

對於每乙個不等式:

\[x_-x_\leq y\]

可以化為:

\[x_\leq x_+y\]

所以我們給

\[i,j\]

這兩個點建一條邊權為y的邊

例:\[\left\x_-x_\leq 0 \\ x_-x_\leq 1 \\ x_-x_\leq 1 \\ x_-x_\leq 5 \\ x_-x_\leq 4 \\ x_-x_\leq -1 \\ x_-x_\leq -3 \\ x_-x_\leq -3 \end\right.\]

可以構圖:

然後我們可以從每個點出發跑一遍最短路

雖然每次會得到不同的解,但是這些解每個都是可行的。

但是我們要得到統一的解,所以我們可以增加乙個源點0

可是這與差分約束系統又有什麼關係呢???

我們不妨增加乙個不等式:

\[\left\x_-x_\leq 0 \\ x_-x_\leq 0 \\ x_-x_\leq 0 \\ x_-x_\leq 0 \\ x_-x_\leq 0 \end\right.\]

這時圖可以變成:

這時我們便可以從源點0開始,跑一遍單源最短路徑

當然如果要求不等式的最大解,可以把最短路改為最長路。

當我們把初值

\[dis[0]=x\]

所有未知數的解都不會大於x(但我們一般都會把這個dis[0]設為0)

差分約束系統學習筆記

差分約束系統中的每個約束條件是形如如下所示的簡單不等式 xj xi bk。例如,求解不等式組 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...

學習筆記 差分約束系統

目錄將邊權取相反數,設此時圖為 g 若 g 無負權環 即 g 無正權環 則有 d v le len v 其中 d v 為在圖 g 上求得的最短路,len v 為源點到 v 的任意路徑權值和。同時可得 d v ge len v 所以可以得到 d v d v 其中 d v 為原圖源點到 v 的最長路。實...

筆記 差分約束系統

是個啥?如果乙個系統由 n 個變數和 m 個約束條件組成,形成 m 個形如 x i y i leq k 的不等式 i,j in 1 n k 為常數 則稱其為差分約束系統 system of difference constraints 亦即,差分約束系統是求解關於一組變數的特殊不等式組的方法。說句人...