BDD简介---2

    由上述我们可以知道,BDD是由1个或2个终端节点(0或1)出度为2(low(u)和high(u))图所组成的,它把BDT从2n 个节点进行裁减,从而减少空间复杂度,然而却增加了时间复杂度,为使其了更有效,我们引入OBDD和R(O)BDD的概念。
    OBDD(Ordered Binary Decision Digram)是所有BDD路径都是基于给定线性序列的BDD。如图2 就是 遵循x1<y1<x2<y2的线性序列。    
    R(O)BDD则满足:a 没有2个不同得节点u,v使之满足 var(u)=var(v),low(u)=low(v),high(u)=high(v)
                           b 没有节点u拥有相同的后继,即low(u)¹higt(u)
    如图3:
[img]C:\Documents and Settings\gyk\桌面\bdd-picture\111.bmp[/img]
    R(O)BDD有些有趣的特性,它提供了一种紧凑,高效的布尔表示,对于所有函数
f: Bn à B总有一个R(O)BDD去表述,同时由于R(O)BDD总为真或假,对它的测试也是在有限时间范围内的(NP--完全),它的终端节点总是一个布尔值,非终端节点则是INF表达式,分别表示:
              t0 = 0
              t1 = 1
tu = var(u)à thigh(u) , tlow(u)    ,u是节点变量

    另外如果是有序的BDD,我们把与每个节点u有关的函数fu映射到(b1,b2…bn)ÎBn 满足 tu[b1/x1,b2/x2,……bn/xn].我们可以得到以下引理
    引理1:对于任何函数 f: Bn à B总有一个ROBDD去表述,u是变量有序的x1<x2…<xn 且 fu = f(x1,x2…xn).
对于变量的有序选择对ROBDD的构建有重要的影响,如我们如果按x1<x2<y1<y2的序列构造(x1<=>y1) ∧(x2<=>y2),可得
[img]C:\Documents and Settings\gyk\桌面\bdd-picture\333.bmp[/img]
    有了ROBDD的概念后,就可以使BDD的算法更容易被表述,例还是对(x1<=>y1) ∧(x2<=>y2 按照x1<y1< x2<y2的有序表述(图2),同时对节点u标号,我们可以得到如下表:
[img]C:\Documents and Settings\gyk\桌面\bdd-picture\1.jpg[/img]
   由此,我们得到了一个更为简便的BDD表述.

你可能感兴趣的:(C++,c,算法,C#)