差分約束系統:
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 亦即,差分約束系統是求解關於一組變數的特殊不等式組的方法。說句人...