Нет, это не очень хорошая идея. Conjunctive normal form в основном используется в теоретической информатике. Существуют алгоритмы для решения формул в CNF, а также доказательства временной сложности и NP-твердости.
С прагматичной точки зрения, вы должны написать код с помощью булевых операторов, которые наиболее «естественно» описывают логику. Это означает полное использование вложенных выражений, операторов, таких как XOR, отрицание и т. Д. Как вы показали, CNF часто противоречит этой цели «естественности», потому что выражение длиннее и часто повторяет подвыражения.
В качестве теоретической стороне записки, в худшем случае, неограниченный булева формула, содержащая п операторы могут преобразовать в формулу CNF, длина которого экспоненциально п. Таким образом, CNF потенциально может взорвать формулу на очень большую сумму. Последовательность примеров, иллюстрирующих это поведение:
- (A & B) | (C & D) ==
(A | C) & (A | D) & (B | C) & (B | D).
- (A & B) | (C & D) | (Е & F) ==
(А | C | Е) & (А | C | F) & (А | D | Е) & (А | D | F) & (B | C | Е) & (B | C | F) & (B | D | E) & (B | D | F).
- (A & B) | (C & D) | (E & F) | (G & Н) ==
(А | C | E | G) & (А | C | Е | Н) & (А | C | F | G) & (А | С | Р | Н) & (A | D | E | G) & (A | D | E | H) & (A | D | F | G) & (A | D | F | H) & (B | C | E | G) & ((B | D | E | G) & (B | D | E | H) & (B | D | E | G) B | D | F | G) & (B | D | F | H).
Вы только что ответили на свой вопрос. Второе выражение в CNF больше и поэтому менее эффективно оценивать и усложнять чтение. –