📜  二元决策图

📅  最后修改于: 2022-05-13 01:57:35.883000             🧑  作者: Mango

二元决策图

二元决策图(BDD)是表示切换函数的一种有效方式。它是一种用于表示布尔函数的数据结构,可以表示为集合或关系的压缩形式。

定义:

BDD 是一组具有有向(从上到下)的无环有根图,它由决策节点和 2 终端节点组成,并具有一个称为 ROOT 的特殊节点。

BDD 是香农辅因子树:

  • f = vf v + v' f v' (香农展开)
  • 顶点代表由变量控制的决策节点(即多路复用器)
  • 叶是常数“0”和“1”

BDD的表示:

决策和子节点

决策和子节点

  • 每个决策节点由一个布尔变量标记,并具有两个子节点,称为低子节点和高子节点。
  • 从一个节点到一个低子节点的边代表变量 0 的赋值,高为 1。
BDD 的表示

BDD 的表示

  • 每个决策节点都有一个变量a并且有两个子节点。

如果不同的变量以相同的顺序出现在从根开始的所有路径上,则称 BDD 是有序的。

三变量函数由 Truth-table 和 BDD 表示。

三变量函数的BDD

三变量函数的BDD

变量排序限制和减少规则使(ROBDD)表示规范

例子:

f = ac+bc+a'b'c

解决方案-

步骤-1:分解关于变量 a 的函数

对于 a' put a=0 & 对于 a put a=1 in 函数;

现在,我们得到——

f =  a' (b'c'+bc) + a(c+bc)    
f =  a'(b'c'+bc) + a(c)

步骤 - 2:分解关于变量 b- 的函数

  • 分解 (b'c'+bc) wrto b = b'(c')+b(c)
  • 分解 (c) wrTo b = b'(c)+b(c)

步骤 - 3:分解关于变量 c- 的函数

  • 分解 c' wrto c = c'(1)
  • 分解 c wrto c = c(0)
  • 分解 c' wrto c' = c'(0)
  • 分解 c wrto c' = c(1)

我们得到:

c'(1)+c(0)      c'(0)+c(1)      c'(0)+c(1)      c'(0)+c(1)

注意:这里变量的顺序是 a、b、c。但是我们可以按任何顺序获取变量。

f=ac+bc+a'b'c的BDD

BDD中的逻辑运算

连词(∧) – AND

(a∧ b) 的 BDD

(a∧ b) 的 BDD

在数学符号中,我们通常写成 a ∧ b。

在上图中,对于 a ∧ b,我们用虚线表示 0(左)分支,用实线表示 1(右)分支。这种约定将使绘制没有很多相交线的图表变得更容易。

析取( ∨ ) –

( a ∨ b) 的 BDD

( a ∨ b) 的 BDD

在数学符号中,我们通常写成 a ∨ b。

否定(⊕) - 不是

( a⊕ b ) 的 BDD

( a⊕ b ) 的 BDD

异或,在数学上通常写为 a⊕ b。

BDD 中的变量排序:

BDD 的大小由所表示的函数和选择的变量顺序决定。

对于某些函数,BDD 的大小可能在线性指数范围之间变化,具体取决于变量的顺序。

例子:

f(x1,.......,x2n) = x1x2+ x3x4+.......+x2n-1x2n

变量排序: x 1 < x 3 <……2n-1 < x 2 < x 4 <……< x 2n

BDD 需要 2 n+1个节点来表示函数。

变量排序: x 1 2 3 4 5 <……..2n-1 2n

BDD 需要 2n 个节点来表示函数。

BDD的应用:

  • BDD 广泛用于 CAD 软件中以合成电路(逻辑合成)和形式验证。
  • 在数字电路分析中。
  • BDD 有几个鲜为人知的应用,包括故障树分析、贝叶斯推理、产品配置和私有信息检索。