关于二元决策图的背景可以在BDD on wikipedia找到。
最简单的方法是构建BDT(二进制决策树),然后根据两个规则减少它:
- 合并任何同构子图
- 消除两个孩子同构的任何节点
但是与BDD相比,BDT存在一个主要问题。有没有办法在不首先构建BDT的情况下构建BDD?
答案 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的精确而完整的答案;
整体Knuth的书籍章节是一个非常好的深度参考,它恰好在(RO)BDD上写了一个,这对于任何认真尝试实施BDD的人来说都是非常幸运的。