布尔函数,DNF和CNF的目的是什么?

时间:2012-08-08 11:20:50

标签: boolean-logic boolean-expression conjunctive-normal-form

布尔函数可以用析取范式(DNF)或联合范式(CNF)表示。任何人都可以解释为什么这些形式有用吗?

2 个答案:

答案 0 :(得分:4)

CNF非常有用,因为这种形式直接描述了布尔SAT问题,而NP-complete则有许多不完整和启发式指数时间求解器。 CNF已经进一步标准化为一种名为“DIMACS CNF file format”的文件格式,大多数解算器都可以从中进行操作。因此,例如,芯片工业可以通过转换为DIMACS CNF来验证其电路设计,并且可以馈入任何可用的解算器。 Tseitin Transformation可以将电路转换为 equisatisfiable CNF。

DNF实际上没那么有用,但将公式转换为DNF意味着可以看到满足公式的可能分配列表。不幸的是,将公式转换为DNF一般很难,并且可能导致指数爆炸(非常大的DNF),这是显而易见的,因为对公式可以有指数级的令人满意的分配。

虽然与DNF相比CNF可以简洁,但有时很难推理,因为例如当从电路转换时它会失去结构,因此另一种简洁的形式将是有用的。 and-inverter graph数据结构是为此目的而设计的;它可以更接近地模拟电路的结构,因此在某些类型的公式中更容易推理。但是,没有很多解算器能够对其进行操作。

其他形式包括:

答案 1 :(得分:0)

它有助于以某种标准方式表达功能。有了这个,就可以更容易地自动完成许多算法。

这两种形式都可以用于自动定理求解,即解决方法中的CNF。