zoukankan      html  css  js  c++  java
  • 差分约束系统

    差分约束系统 
        如果一个系统由n个变量和m个不等式组成,形如 Xj - Xi <= Bk, i, j属于[1, n], k属于[1,m],这样的系统成为差分约束系统。差分约束系统通常用于求关于一组变量的不等式组。

    转换成图 
        可以将差分约束系统转换为单源最短路径来进行求解。 
        记Xi表示图中源点s到达图中节点i的最短路径长度,Xj为图中源点s到达节点j的最短路径长度,依次转换... 并将Bk视为图中节点i到节点j的边的长度,则根据 min_dist[i] + dist[i-->j] >= min_dist[j]可以得到Xi + Bk >= Xj, 这和初始给定的约束条件 Xj - Xi <= Bk 一致。

    应用 
        于是,就将给定的约束变量Xi,Bk和构造出来的图的节点和最短路径对应起来。接着就可以利用最短路来求解差分约束系统的目标结果。 
        比如,给出一系列差分约束条件 Xj - Xi <= Bk ... 求出 Xt - Xs 的最大值。 
    显然,将差分约束转换为图之后,Xt-Xs的最大值,就等于图中s到t的最短路径。这是因为通过转化的时候各个Xi都转换为s到节点i的最短距离,那么Xt为源点s到节点t的最短距离,Xs=0,于是,Xt - Xs就等于图中s到t的最短距离。

    需要注意的几个问题 
    (1)Xj - Xi >= k可以转换为 Xi - Xj <= -k,这样可能会出现负权边,相应的求最短路就不能用Dijkstra算法
    (2)Xj - Xi = k 转换为 Xj - Xi <= k 和 Xj - Xi >= k(即Xi - Xj <= -k)处理 
    (3)当图连通时,只需要对源点进行一次SPFA即可,若不连通,则需要对每个顶点SPFA一次 
    (4)在求最短路还需要判断是否存在负权和环,若存在负权和环,则该差分约束系统不存在可行解 
    (5)对于 Xj - Xi < k 或者 Xj - Xi > k,差分约束系统只针对 >= 或者 <= ,还需要将 > < 转换变成 >=, <=.

    参考 
    http://www.cnblogs.com/pony1993/archive/2012/09/01/2666996.html

  • 相关阅读:
    搭建maven web项目
    Promise封装AJAX
    迭代器Iterator
    ...扩展运算符
    解构赋值和模板字符串(反引号 ` `)
    记录一下let,const,var的区别
    重拾旧笔,好久不见
    SQL 中实现递归(根据子节点查找父节点)
    SQL 利用case when 动态给SQL添加条件查询语句
    关于webapi练习过程中遇到的一系列问题记录
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/4901565.html
Copyright © 2011-2022 走看看