我正在与CUDD C++合作,我想知道是否可以这样做:
现在,我将下一个表存储在bdd中。
|-----|-----|-----||-----|
| x1 | x2 | x3 || y |
|-----|-----|-----||-----|
| 0 | 0 | 0 || 0 |
|-----|-----|-----||-----|
| 0 | 0 | 1 || 0 |
|-----|-----|-----||-----|
| 0 | 1 | 0 || 1 |
|-----|-----|-----||-----|
| 0 | 1 | 1 || 0 |
|-----|-----|-----||-----|
| 1 | 0 | 0 || 0 |
|-----|-----|-----||-----|
| 1 | 0 | 1 || 1 |
|-----|-----|-----||-----|
| 1 | 1 | 0 || 0 |
|-----|-----|-----||-----|
| 1 | 1 | 1 || 0 |
|-----|-----|-----||-----|如果原始输出的值为1,是否可以创建另一个具有2个输出提取x2、x3值的表?
期望产出:
|-----||-----|-----|
| x1 || x2 | x3 |
|-----||-----|-----|
| 0 || 1 | 0 |
|-----||-----|-----|
| 1 || 0 | 1 |
|-----||-----|-----|我已经尝试过使用ExistAbastract()命令,并获得了具有正确数据的2 bdds,但是x2和x3仍然是输入。是否可以根据x2的值将变量和x3从变量转换为输出
发布于 2019-05-02 19:12:34
第一个表是一个值表,它为x1、x2、x3的每一个组合定义一个y值,因此可以表示为变量x1、x2、x3上的BDD。
您想要的输出表只剩下双行行的y1。因此,您需要两个BDDs x2和x3,它们的范围仅限于x1的值。
请注意,如果对于x1的某些值,x2、x3的多个组合使得y(x1,x2,x3)=True,则您的问题是模棱两可的。但如果不是这样的话,这里有一个可行的解决方案。
让我们只考虑您想要x2函数的情况(另一种情况类似)。存在地抽象x3并得到:
|-----|-----||-----|
| x1 | x2 || y |
|-----|-----||-----|
| 0 | 0 || 0 |
|-----|-----||-----|
| 0 | 1 || 1 |
|-----|-----||-----|
| 1 | 0 || 1 |
|-----|-----||-----|
| 1 | 1 || 0 |
|-----|-----||-----|一开始还不错。现在,作为最终函数,您想要的是y为真的行中x2的值。让我们分解这个:
我们可以将第一个案例构建为:
(y & x2).ExistAbstract(x2)这个表达式已经足够了,因为这个表达式是一个函数,它对所有其他输入值都返回FALSE。
https://stackoverflow.com/questions/55954326
复制相似问题