您的位置:首页 > 其它

图论: 差分约束系统

2016-05-19 23:26 239 查看
差分约束系统
 

    
如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),

 则称其为差分约束系统(system of difference
constraints)。亦即,差分约束系统是求解关于一组变量的

 特殊不等式组的方法。

  求解差分约束系统,可以转化成图论的单源最短路径(或最长路径)问题。

  观察xj-xi<=bk,会发现它类似最短路中的三角不等式d[v]<=d[u]+w[u,v],即d[v]-d[u]<=w[u,v]。因此,

 以每个变量xi为结点,对于约束条件xj-xi<=bk,连接一条边(i,j),边权为bk。我们再增加一个源点s,s与所

 有定点相连,边权均为0。对这个图,以s为源点运行Bellman-ford算法(或SPFA算法),最终{d[
i]}即为一

 组可行解。

    其实我想总结的是:
怎么将实际问题中确定约束条件的符号, 来却定用最长路还是最短路.

    1.
最短路:  d[x] - d[y] >=
Z   ==>  d[y]
<= d[x]+(-Z)

       spfa算法的判断条件变成:
if( dist[edges[e].v] >
dist[u]+edges[e].w )

                                   
dist[edges[e].v] = dist[u]+edges[e].w

      
连边 x->y  权值为-Z,
初始化为源点到个点的距离为INF(无穷大), 源点到源点为0

       目的:
求出最短路满足它们与源点之间的相互差值最大.

 

    2.
最长路:  d[x] - d[y] >=
Z   ==>  d[x]
>= d[y]+Z

      
spfa算法的判断条件变成:
if( dist[edges[e].v] <
dist[u]+edges[e].w )

                                   
dist[edges[e].v] = dist[u]+edges[e].w

      
连边 y->x 权值为Z, 初始化为源点到个点的距离为-INF(无穷小), 源点到源点为0

       目的:
求出最长路满足它们与源点之间的相互差值最小.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: