`
暴风雪
  • 浏览: 387967 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[转载]差分约束系统详解

阅读更多

(本文假设读者已经有以下知识:最短路径的基本性质、Bellman-Ford算法。)
    比如有这样一组不等式:
  
X1 - X2 <= 0
X1 - X5 <= -1
X2 - X5 <= 1
X3 - X1 <= 5
X4 - X1 <= 4
X4 - X3 <= -1
X5 - X3 <= -3
X5 - X4 <= -3
不等式组(1)

    全都是两个未知数的差小于等于某个常数(大于等于也可以,因为左右乘以-1就可以化成小于等于)。这样的不等式组就称作差分约束系统。
    这个不等式组要么无解,要么就有无数组解。因为如果有一组解{X1, X2, ..., Xn}的话,那么对于任何一个常数k,{X1 + k, X2 + k, ..., Xn + k}肯定也是一组解,因为任何两个数同时加一个数之后,它们的差是不变的,那么这个差分约束系统中的所有不等式都不会被破坏。
   
    差分约束系统的解法利用到了单源最短路径问题中的三角形不等式。即对于任何一条边u -> v,都有:

d(v) <= d(u) + w(u, v)

    其中d(u)和d(v)是从源点分别到点u和点v的最短路径的权值,w(u, v)是边u -> v的权值。
    显然以上不等式就是d(v) - d(u) <= w(u, v)。这个形式正好和差分约束系统中的不等式形式相同。于是我们就可以把一个差分约束系统转化成一张图,每个未知数Xi对应图中的一个顶点Vi,把所有不等式都化成图中的一条边。对于不等式Xi - Xj <= c,把它化成三角形不等式:Xi <= Xj + c,就可以化成边Vj -> Vi,权值为c。最后,我们在这张图上求一次单源最短路径,这些三角形不等式就会全部都满足了,因为它是最短路径问题的基本性质嘛。
    话说回来,所谓单源最短路径,当然要有一个源点,然后再求这个源点到其他所有点的最短路径。那么源点在哪呢?我们不妨自已造一个。以上面的不等式组为例,我们就再新加一个未知数X0。然后对原来的每个未知数都对X0随便加一个不等式(这个不等式当然也要和其它不等式形式相同,即两个未知数的差小于等于某个常数)。我们索性就全都写成Xn - X0 <= 0,于是这个差分约束系统中就多出了下列不等式:
   
X1 - X0 <= 0
X2 - X0 <= 0
X3 - X0 <= 0
X4 - X0 <= 0
X5 - X0 <= 0
不等式组(2)

    对于这5个不等式,也在图中建出相应的边。最后形成的图如下:


图1

    图中的每一条边都代表差分约束系统中的一个不等式。现在以V0为源点,求单源最短路径。最终得到的V0到Vn的最短路径长度就是Xn的一个解啦。从图1中可以看到,这组解是{-5, -3, 0, -1, -4}。当然把每个数都加上10也是一组解:{5, 7, 10, 9, 6}。但是这组解只满足不等式组(1),也就是原先的差分约束系统;而不满足不等式组(2),也就是我们后来加上去的那些不等式。当然这是无关紧要的,因为X0本来就是个局外人,是我们后来加上去的,满不满足与X0有关的不等式我们并不在乎。
    也有可能出现无解的情况,也就是从源点到某一个顶点不存在最短路径。也说是图中存在负权的圈。这一点我就不展开了,请自已参看最短路径问题的一些基本定理。

    其实,对于图1来说,它代表的一组解其实是{0, -5, -3, 0, -1, -4},也就是说X0的值也在这组解当中。但是X0的值是无可争议的,既然是以它作为源点求的最短路径,那么源点到它的最短路径长度当然是0了。因此,实际上我们解的这个差分约束系统无形中又存在一个条件:

X0 = 0

    也就是说在不等式组(1)、(2)组成的差分约束系统的前提下,再把其中的一个未知数的值定死。这样的情况在实际问题中是很常见的。比如一个问题表面上给出了一些不等式,但还隐藏着一些不等式,比如所有未知数都大于等于0或者都不能超过某个上限之类的。比如上面的不等式组(2)就规定了所有未知数都小于等于0。
   
    对于这种有一个未知数定死的差分约束系统,还有一个有趣的性质,那就是通过最短路径算法求出来的一组解当中,所有未知数都达到最大值。下面我来粗略地证明一下,这个证明过程要结合Bellman-Ford算法的过程来说明。
    假设X0是定死的;X1到Xn在满足所有约束的情况下可以取到的最大值分别为M1、M2、……、Mn(当然我们不知道它们的值是多少);解出的源点到每个点的最短路径长度为D1、D2、……、Dn。
    基本的Bellman-Ford算法是一开始初始化D1到Dn都是无穷大。然后检查所有的边对应的三角形不等式,一但发现有不满足三角形不等式的情况,则更新对应的D值。最后求出来的D1到Dn就是源点到每个点的最短路径长度。
    如果我们一开始初始化D1、D2、……、Dn的值分别为M1、M2、……、Mn,则由于它们全都满足三角形不等式(我们刚才已经假设M1到Mn是一组合法的解),则Bellman-Ford算法不会再更新任合D值,则最后得出的解就是M1、M2、……、Mn。
    好了,现在知道了,初始值无穷大时,算出来的是D1、D2、……、Dn;初始值比较小的时候算出来的则是M1、M2、……、Mn。大家用的是同样的算法,同样的计算过程,总不可能初始值大的算出来的结果反而小吧。所以D1、D2、……、Dn就是M1、M2、……、Mn。
   
    那么如果在一个未知数定死的情况下,要求其它所有未知数的最小值怎么办?只要反过来求最长路径就可以了。最长路径中的三角不等式与最短路径中相反:

d(v) >= d(u) + w(u, v)
也就是 d(v) - d(u) >= w(u, v)

    所以建图的时候要先把所有不等式化成大于等于号的。其它各种过程,包括证明为什么解出的是最小值的证法,都完全类似。
   
    用到差分约束系统的题目有ZJU 2770,祝好运。

 

本文源地址:http://imlazy.ycool.com/post.1702305.html

 

分享到:
评论

相关推荐

    详细差分约束系统详解

    详细差分约束系统详解 差分约束系统是线性规划的一种特殊形式,通过约束图和 Bellman-Ford 算法来解决。下面将详细介绍差分约束系统的定义、约束图、解法和应用。 定义 差分约束系统是一种特殊的线性规划问题,...

    差分约束系统详解

    差分约束系统是一种用于建模和解决线性不等式约束问题的方法,它涉及到一系列变量之间的差异关系。在这样的系统中,线性规划矩阵 \( A \) 的结构特殊,每行包含一个 1 和一个 -1,其余元素为 0。这种结构确保了约束...

    差分约束系统例题详解

    差分约束系统是一种在计算机科学和数学中用于解决优化问题的方法,特别是在图论和最优化领域。它通过定义变量之间的差异关系来建模问题,通常用于处理线性不等式系统。在这个例题中,差分约束系统被用来解决一个序列...

    Allegro差分走线详解

    ### Allegro差分走线详解 #### 一、差分对的基本概念 在高速数字电路设计中,差分对(Differential Pair)是一种常见的信号传输方式。与单端信号相比,差分信号具有更高的抗干扰能力、更低的辐射以及更好的信号...

    什么叫差分信号?详解差分信号

    详解差分信号 #### 一、差分信号的基本概念 差分信号是一种在通信和电子领域广泛使用的信号形式,通过一对导体(或线路)之间的电压差来传输信息。与传统的单端信号不同,差分信号具有更高的抗干扰能力、更好的...

    Allegro16.6约束规则设置详解-SCC

    - **设置差分约束**:为差分对设置间距、长度等约束。 **二、高级约束规则设置** 1. **单个网络长度约束**: - 为特定网络设置独立的长度要求。 2. **a+b 类长度约束**: - 一组网络总长度的约束。 3. **a+b-...

    简单差分放大电路详解

    简单差分放大电路详解那么这个电路是怎么工作的了,书本教材中介绍是:电源Vcc通过电阻R1和Q2产生一个基准电流 Iref,然后通过镜像电流源在Q1的集电极得到相应的Ic1,作为提供给某个放大器的偏置电流。Ib1 =Ib2=IbIc1 ...

    差分时钟接口详解,LVDS,LVPECL,HCSL,CML

    差分时钟接口是电子系统设计中用于同步数据传输和降低干扰的重要技术。该技术利用两个相互依存且反相的信号来表示数据,具有较高抗干扰能力和稳定时钟信号的能力。本文将重点介绍四种常见的差分时钟接口类型:LVPECL...

    Allegro16.6约束规则设置详解

    在电子设计自动化(EDA)领域,Cadence的Allegro软件是广泛使用的PCB设计工具。...文件"Allegro16.6约束规则设置详解超详细.pdf"将提供更深入的指导,帮助用户充分利用这些高级功能,创建出高效可靠的电路板设计方案。

    Allegro_16.3约束规则设置详解

    - **差分对**:用于设置一对信号线的约束。 - **扩展网络 (XNet)**:特定类型的网络集合。 - **相对或匹配群组**:用于一组需要特殊处理的网络。 - **引脚对**:最低级别的约束,仅适用于指定的引脚对。 #### 四、...

    Oracle约束详解 Oracle约束详解

    Oracle约束详解

    详解OCL功放差分放大电路

    本文主题是图解经典电路之OCL差分功放,通过图文这种分析的方式能够有效减少面对复杂电路时的恐惧感。整个OCL电路可以等效为一个大功率的运放,如何消除大功率三极管的交越失真。又如何通过添加反馈电阻限制Q1Q2的...

    Allegro16.6约束规则设置详解(图文并茂)

    Allegro 16.6是Cadence公司出品的一款用于PCB设计的工具,具有强大的约束管理器来设置设计规则,保证PCB的布局布线满足电子信号完整性和电磁兼容性要求。本文主要讲解了Allegro 16.6约束管理器的使用,包括基本的...

    将传递函数变成差分方程形式

    本文详细介绍了如何将传递函数转换为差分方程形式,涵盖了从理论基础到具体实现步骤的各个方面,并特别关注了非线性系统和带纯延迟系统的处理方法。通过以上介绍,希望能帮助读者更好地理解和掌握传递函数离散化的...

    小梅哥FPGA时序约束从遥望到领悟详解

    "小梅哥FPGA时序约束从遥望到领悟详解"这个主题深入浅出地探讨了这一关键概念,帮助开发者从初识到精通时序约束的运用。 时序约束是指在FPGA设计中,为确保电路正确运行,对电路中各部分操作的时间关系进行规定。...

    gps差分定位基本原理详解

    gps差分定位基本原理详解ppt课件

    差分信号详解 (Differential Signal)

    差分信号详解 在高速电路设计中,差分信号(Differential Signal)是一种非常重要的信号形式,以至于电路中最关键的信号往往都要采用差分结构设计。那么,什么使得差分信号如此受青睐呢? 首先,差分信号的定义是...

Global site tag (gtag.js) - Google Analytics