首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CUDD的递归方法

CUDD的递归方法
EN

Stack Overflow用户
提问于 2020-08-24 19:00:30
回答 1查看 80关注 0票数 0

这是以下帖子中@DCTLib建议的后续行动。

Cudd_PrintMinterm, accessing the individual minterms in the sum of products

我一直在研究这个建议的(b)部分,并将在另一篇文章中分享一些伪代码。

同时,在他的部分(b)建议中,@DCTLib发布了一个指向https://github.com/VerifiableRobotics/slugs/blob/master/src/BFAbstractionLibrary/BFCudd.cpp的链接。我一直在试着读这个节目。在经典的Somenzi论文中有一个递归函数,即二进制决策图,它描述了计算满意分配数的算法(图7)。我一直在尝试比较这两种动物,鼻涕虫和图7,但是很难看到相似之处。但对我来说,C是最难以理解的。你知道鼻涕虫BFCudd是否基于索梅泽图7 @DCTLib吗?

谢谢你,贵

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-26 15:05:56

这不是完全相同的算法。

有两个主要区别:

首先,"SatHowMany“函数在计数时不需要考虑一个变量立方体。相反,该函数考虑所有变量。"recurse_getNofSatisfyingAssignments“支持函数中显示的多维数据集,如果在BDD中找到未出现在多维数据集中的变量,则可能返回NaN (而不是数字)。其余的分歧似乎来自于这种支持。

其次,SatHowMany向节点的所有n个变量返回满意的赋值数。例如,这导致了第4行2的除法。"recurse_getNofSatisfyingAssignments“只返回要考虑的其余变量的赋值数。

这两种算法都缓存信息--在"SatHowMany“中,它称为表,在"recurse_getNofSatisfyingAssignments”中称为缓冲区。注意,在"recurse_getNofSatisfyingAssignments“的第24行中,抛出了一个常量字符串。这意味着该函数要么无法工作,要么永远无法到达代码。很可能是后者。

函数"SatHowMany“似乎假定它得到一个BDD节点--它不能是指向可补BDD节点的指针。函数"recurse_getNofSatisfyingAssignments“可以正确地处理可补节点,因为DdNode*可以存储指向可补节点的指针。

由于对多维数据集的支持,"recurse_getNofSatisfyingAssignments“支持灵活的变量排序(因此查找"cuddI”表示变量在当前BDD变量排序中的位置)。对于函数SatHowMany,变量排序没有区别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63567155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档