关于二叉决策图的背景可以在这里找到维基百科上的BDD。
最简单的方法是构建BDT(二叉决策树),然后根据以下两个规则进行缩减:
- 合并所有同构子图。
- 消除其两个孩子同构的任何节点。
但是,与BDD相比,BDT可能非常庞大。有没有什么方法可以在不先构建BDT的情况下构建BDD呢?
关于二叉决策图的背景可以在这里找到维基百科上的BDD。
最简单的方法是构建BDT(二叉决策树),然后根据以下两个规则进行缩减:
- 合并所有同构子图。
- 消除其两个孩子同构的任何节点。
但是,与BDD相比,BDT可能非常庞大。有没有什么方法可以在不先构建BDT的情况下构建BDD呢?
使用Andersen的第16-17页中的Mk
(创建节点)和Build
(构建BDD)算法。虽然我已经有一段时间没有使用BDD了,但我相信H或T应该是哈希表。为了保险起见,两者都要使用哈希表。
如果你想做得对,就试着读一下高德纳。
https://www-cs-faculty.stanford.edu/~knuth/fasc1b.ps.gz
更准确地说,该书第14页开始的算法“R”是对原帖的精确而完整的回答。总的来说,Knuth的书籍章节是非常好的深度参考资料,碰巧他写了一本关于(RO)BDD的书,这对于任何认真尝试实现BDD的人来说都是非常幸运的。