差分约束与最短路径

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值