联合范式的写作条件

时间:2016-04-01 14:17:27

标签: logic conditional-statements boolean-logic conjunctive-normal-form

联合范式(CNF)是命题公式的标准化符号,它规定每个公式都应该写成一个结合的结合。每个布尔公式都可以转换为CNF。例如:

A | (B & C)

在CNF有这样的代表:

(A | B) & (A | C)

在CNF中编写条件的编程是最佳做法吗?

1 个答案:

答案 0 :(得分:2)

不,这不是个好主意。 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)。