二元决策图
二元决策图(BDD)是表示切换函数的一种有效方式。它是一种用于表示布尔函数的数据结构,可以表示为集合或关系的压缩形式。
定义:
BDD 是一组具有有向边(从上到下)的无环有根图,它由决策节点和 2 终端节点组成,并具有一个称为 ROOT 的特殊节点。
A binary decision diagram is a rooted, directed, acyclic graph. Nonterminal nodes in such a graph are called decision nodes; each decision node is labeled by a Boolean variable and has two child nodes, referred to as low child and high child.
BDD 是香农辅因子树:
- f = vf v + v' f v' (香农展开)
- 顶点代表由变量控制的决策节点(即多路复用器)
- 叶是常数“0”和“1”
BDD的表示:
- 每个决策节点由一个布尔变量标记,并具有两个子节点,称为低子节点和高子节点。
- 从一个节点到一个低子节点的边代表变量 0 的赋值,高为 1。
- 每个决策节点都有一个变量a并且有两个子节点。
如果不同的变量以相同的顺序出现在从根开始的所有路径上,则称 BDD 是有序的。
三变量函数由 Truth-table 和 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。但是我们可以按任何顺序获取变量。
BDD中的逻辑运算
连词(∧) – AND
在数学符号中,我们通常写成 a ∧ b。
在上图中,对于 a ∧ b,我们用虚线表示 0(左)分支,用实线表示 1(右)分支。这种约定将使绘制没有很多相交线的图表变得更容易。
析取( ∨ ) –或
在数学符号中,我们通常写成 a ∨ b。
否定(⊕) - 不是
异或,在数学上通常写为 a⊕ b。
BDD 中的变量排序:
BDD 的大小由所表示的函数和选择的变量顺序决定。
对于某些函数,BDD 的大小可能在线性到指数范围之间变化,具体取决于变量的顺序。
例子:
f(x1,.......,x2n) = x1x2+ x3x4+.......+x2n-1x2n
变量排序: x 1 < x 3 <……
BDD 需要 2 n+1个节点来表示函数。
变量排序: x 1
BDD 需要 2n 个节点来表示函数。
BDD的应用:
- BDD 广泛用于 CAD 软件中以合成电路(逻辑合成)和形式验证。
- 在数字电路分析中。
- BDD 有几个鲜为人知的应用,包括故障树分析、贝叶斯推理、产品配置和私有信息检索。