从一个具有三个输入和两个输出的减法器的真值表开始,我已经为第二个输出z2获得了以下布尔公式(左边的“贷款”):
z2 = x0'x1'x2 + x0'x1x2'+ x0'x1x2 + x0x1x2
(其中 x0'表示 NOT x0 )。
简化它: z2 = x2(x0⊕x1)'+ x1(x0⊕x2)'+ x1x2
表示: z2 = x2(x0 XNOR x1)+ x1(x0 XNOR x2)+ x1x2
我可以简化更多吗? 我尝试过使用 z2 =(x0 XNOR x1)+(x0 XNOR x2)+ x1x2,但它没有做到这一点。
答案 0 :(得分:1)
您的原始表达式有12个变量引用和16个运算符。您的简化有8个变量引用和7个运算符。这是一个包含6个变量引用和6个运算符的表达式:
z2 = x0x1x2 + x0'(x1 + x2)
我不知道这在任何意义上是否都是微不足道的。
你问我是怎么找到这个表达的。我没有从你的简化开始,我从你在评论中引用的真值表开始。我在这里重现它:
当我看着桌子寻找图案时,我看到它看起来像一个交叉或斜对称矩阵:如果我将最后一列颠倒翻转,那么我将采用原始列的所有项目的补码。 (我不知道这种对称性的正确术语;这些是我想到的术语。)我试图将这种对称性封装成逻辑表达式但却失败了。
这让我看到了最后一栏的上半部分和下半部分。上半部分大部分为1,下半部分大多为零。然后让我感到震惊的是,上半部分看起来像二进制OR操作的真值表,下半部分看起来像二进制AND操作。上半部分用于x0'当然,下半部分是x0。把这些事实放在一起给了我表达的意思。
我通过查看是否可以将原始表达式操纵到我的中来确认该表达式。我可以,通过做
z2 = x0'x1'x2 + x0'x1x2' + x0'x1x2 + x0x1x2
= x0'(x1'x2 + x1x2' + x1x2) + x0x1x2
= x0'(x1 + x2) + x0x1x2
= x0x1x2 + x0'(x1 + x2)
从第二行到第三行的转换当然等同于识别二进制OR的真值表,所以这与我的实际发现方法没什么不同。
后一种方法可能更容易转移到其他问题:从多个术语中分解出一个共同因素。我的实际方法更有趣但不易转移。我最喜欢的数学定义是"对模式的研究"这解释了为什么这个方法很有趣。