我正在尝试使用Cudd_bddIte
来实现简单的 BDD。以下代码按预期工作,给出图片中的图表(代表 node bdd
):
DdNode *v1 = Cudd_bddNewVar(gbm);
Cudd_Ref(v1);
DdNode *v2 = Cudd_bddNewVar(gbm);
Cudd_Ref(v2);
DdNode *v3 = Cudd_bddNewVar(gbm);
Cudd_Ref(v3);
DdNode *tmp1 = Cudd_bddIte(gbm, v1, Cudd_ReadLogicZero(gbm), Cudd_ReadOne(gbm));
Cudd_Ref(tmp1);
DdNode *tmp2 = Cudd_bddIte(gbm, v2, tmp1, Cudd_ReadOne(gbm));
Cudd_Ref(tmp2);
Cudd_RecursiveDeref(gbm,tmp1);
DdNode *bdd = Cudd_bddIte(gbm, v3, tmp2, Cudd_ReadOne(gbm));
Cudd_Ref(bdd);
Cudd_RecursiveDeref(gbm,tmp2);
但是,如果我将 ITE 语句更改为tmp2
以下
DdNode *tmp2 = Cudd_bddIte(gbm, v2, tmp1, Cudd_ReadLogicZero(gbm));
我得到了这个意想不到的图表:
对我来说,这是错误的,因为我希望最顶层的变量在为假时仍会立即产生 1,如第一张图片所示。我究竟做错了什么?