如何有效地实现二元决策图(BDD)?

时间:2010-11-02 10:42:34

标签: algorithm data-structures implementation boolean-logic binary-decision-diagram

关于二元决策图的背景可以在BDD on wikipedia找到。

最简单的方法是构建BDT(二进制决策树),然后根据两个规则减少它:
- 合并任何同构子图 - 消除两个孩子同构的任何节点 但是与BDD相比,BDT存在一个主要问题。有没有办法在不首先构建BDT的情况下构建BDD?

3 个答案:

答案 0 :(得分:6)

使用Andersen中的Mk(制作节点)和Build(构建BDD)算法,第16-17页。我有一段时间没有使用BDD,但我相信 H T 应该是一个哈希表。使用哈希表是为了安全起见。

答案 1 :(得分:1)

构建BDD的方法来自表示您正在尝试构建的布尔函数的表达式的解析树。

即,如果你想要(A + B)。(C + D)的BDD,你首先将(A + B)。(C + D)解析成树:

   .
  / \
 +   +
/ \ / \
A B C D
然后

以递归方式构建BDD - 您需要可以形成两个BDDS的AND和OR的方法,以及基本情况(单个变量BDD)。

这也适用于逻辑电路(视图为解析DAG而不是树)。

关于BDD的这些说明解释了如何实现AND和OR,以及使事情有效工作所需的哈希表:http://bit.ly/cuClGe

答案 2 :(得分:-1)

如果你想做得对,请尝试阅读Knuth。

https://www-cs-faculty.stanford.edu/~knuth/fasc1b.ps.gz

更准确地说,从该书章节第14页开始的算法“R”是对OP的精确而完整的答案;

enter image description here

整体Knuth的书籍章节是一个非常好的深度参考,它恰好在(RO)BDD上写了一个,这对于任何认真尝试实施BDD的人来说都是非常幸运的。