差分約束與最短路徑
阿新 • • 發佈:2019-01-04
差分約束問題(Difference constraints)
一類特殊的線性規劃(Linear Program)問題,例如求一個可行n維解向量X,使得其滿足以下m個式子:
利用“最短路徑”解決差分約束問題
①建立一個圖,包含n個結點,m條邊;且對Xj - Xi ≤ Wij,edge(Vi, Vj) = Wij
②增加結點V0,從V0出發引入n條權重為0的邊連結到各個原有結點
③以V0為源結點,利用Bellman-Ford演算法求V0到每個結點的最短路徑δ(V0, Vi)
④若存在負權環,則解不存在;若Bellman-Ford執行良好,則Xi = δ(V0, Vi)
*⑤若要求Xi ≤ 0,則此方法求得的∑Xi最大(解的最大化)
*⑥此方法求的的max{Xi} - min{Xi}最小(L1範數跨度最小)
演算法的證明
分為兩部分證明:
①證明:存在負權環時解不存在
反證法。假設X使得其成立,則約束條件Xj - Xi ≤ Wij的左邊相加為0,右邊相加為負數,則0 ≤ 負數,矛盾
②證明:不存在負權環時解存在
δ(V0, Vj) ≤ δ(V0, Vi) + Wij <=> Xj - Xi ≤ Wij
演算法的優化
優化前,演算法的執行時間(n+1個結點,m+n條邊):O(n²+mn)
優化:沒有必要引入結點V0,只需要將所有結點的初始值由+∞改為0即可
優化後:O(mn)