以下程序生成n个变量的k-CNF表达式的所有真值表:
以真值表(2^2^n)-1//开始,例如,n=4时为0xFFFF
对于每个新的真值表//例如,0xFFFF
对于每个(n选择k)变量//例如a、c、d
对于这些变量的每个(2^k)子句//例如(a或not c或not d)
从子句和前一个真值表//例如,NewTT=PrevTT和(…)
位操作可以有效地实现最后一步。如果用真值表A、B…来表示每个变量。。。,在1-CNF中,最后一步是“NewTT=PrevTT和(A或B或C…)”。例如,对于四个变量a、b、c和d,“a”的1-CNF真值表是0xFF00,“not c”是0x3333,而“not d”是0x5555。相应的步骤是“NewTT=PrevTT和0xFFBB”。
|