不,这不是个好主意。 Conjunctive normal form主要用于理论计算机科学。有解算CNF公式的算法,以及时间复杂度和NP硬度的证明。
从实用的角度来看,您应该使用大多数“自然地”描述逻辑的布尔运算符来编写代码。这意味着充分利用嵌套表达式,XOR,否定等运算符。正如你所举例说的那样,CNF经常与这种“自然”的目标相矛盾,因为表达更长,并且经常重复子表达。
作为理论旁注,在最坏的情况下,包含 n 运算符的无限制布尔公式可以转换为CNF公式,其长度在 n 中是指数的。因此,CNF可能会大量炸毁配方。一系列说明此行为的示例:
- (A& B)| (C& D)==
(A | C)& (A | D)& (B | C)& (B | D)。
- (A& B)| (C& D)| (E& F)==
(A | C | E)& (A | C | F)& (A | D | E)& (A | D | F)& (B | C | E)& (B | C | F)& (B | D | E)& (B | D | F)。
- (A& B)| (C& D)| (E& F)| (G& H)==
(A | C | E | G)& (A | C | E | H)& (A | C | F | G)& (A | C | F | H)& (A | D | E | G)& (A | D | E | H)& (A | D | F | G)& (A | D | F | H)& (B | C | E | G)& (B | C | E | H)& (B | C | F | G)& (B | C | F | H)& (B | D | E | G)& (B | D | E | H)& (B | D | F | G)& (B | D | F | H)。