CNF简化算法(CNF Simplification Algorithm)

假设一个布尔表达式是以联合的正常形式存在的:是否存在一个“简单”算法来简化它,同时将其保留在CNF中?

特别是,下列表达式的属性会导致这种简化?

(~a+b+c)(a+~b+c)(a+~c)

简化为...

(~a+b+c)(a+~b)(a+~c)

Given that a boolean expression is in conjunctive normal form: is there a "simple" algorithm to simplify it while keeping it in CNF?

In particular, what property of the following expression causes this simplifiation?

(~a+b+c)(a+~b+c)(a+~c)

simplifies to ...

(~a+b+c)(a+~b)(a+~c)

最满意答案

你的例子的卡诺图是:

在这里输入图像描述

为了获得简化的DNF ,'1'单元格被分组以获得具有最小数目的最小数目的封面。

类似地,可以将'0'单元分组以得到具有最少数量的项的逆覆盖。

逆映射:

在这里输入图像描述

所得到的术语的文字必须颠倒以达到期望的最小CNF

(a +〜b)(a +〜c)(〜a + b + c)

该过程利用了minterm的逆是具有反转文字的maxterm (通常称为CNF子句 )这一事实。

The Karnaugh map of your example is:

enter image description here

To get a simplified DNF, '1' cells are grouped to get a cover with the minimum number of minterms.

Similarly, one can group the '0' cells to get an inverse cover with the minimum number of terms.

The inverse map:

enter image description here

The literals of the resulting terms have to be inverted to arrive at the desired minimum CNF

(a + ~b) (a + ~c) (~a + b + c)

The procedure makes use of the fact that the inverse of a minterm is a maxterm (commonly called CNF clause) with inverted literals.

更多推荐