合合范式(CNF)是命题公式的一种标准化表示法,它规定每一个公式都应写成一个断点连词。每个布尔公式都可以转换为CNF。例如:
A | (B & C)
在CNF中有如下表示:
(A | B) & (A | C)
用CNF编写条件词是编程的最佳实践吗?
发布于 2016-04-03 17:57:22
不,这不是个好主意。合合范式主要用于理论计算机科学。在CNF中有求解公式的算法,并证明了算法的时间复杂度和NP-硬度.
从务实的角度来看,您应该使用布尔运算符编写代码,这些运算符最“自然”地描述逻辑。这意味着充分利用嵌套表达式、运算符(如XOR、否定句等)。正如你所举的例子,CNF经常与这个“自然”的目标相矛盾,因为这个表达是更长的,并且经常重复子表达式。
作为理论上的补充,在最坏的情况下,包含n个算子的无限制布尔公式可以转化为一个长度为n的CNF公式,因此CNF可以很大程度地炸掉一个公式。演示这种行为的一系列示例:
https://stackoverflow.com/questions/36358673
复制相似问题