差分约束问题(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)