【问题标题】:Simplifying 5-var Boolean SOP Expression using the Laws and Properties使用定律和属性简化 5 变量布尔 SOP 表达式
【发布时间】:2017-11-10 01:26:39
【问题描述】:

我有这个问题让我很困惑,因为我不知道我应该从哪里开始,我应该在开始时选择哪些术语?因为这个令人困惑的表达甚至不让我接受共同点,因为它没有意义。此外,它甚至不允许我删除赞美(使用法律),因为它也没有任何意义。请帮助我,至少只是指导我该怎么做?我应该从哪里开始?我将不胜感激。

我用来写表达式的符号解释:

! : 不是门

+ : 或门

。 (点):与门

布尔表达式:

A.!B.E + !(B.C).D.!E + !(C.D).E+!A.D.!E + A.!(C.D).E + A.E + A.B.!E + !(A.C ) + B.C.!D

我使用了一个在线表达式简化器,它给了我以下答案:

!A + B + !C + D + E

但是如何在这个简短的表达式中简化了上面的长表达式?我知道法律和财产,但我不明白我应该如何开始简化长篇?我应该首先查看哪些术语?请任何人帮助我。

【问题讨论】:

  • 必须使用“法律和属性”吗?在这种情况下,构建一个只有 32 行的真值表会容易得多。如果您的最终表达式是正确的,则表格以所有 True 结束,只有一个例外。从中构建一个等价的表达式是微不足道的。
  • 是的@RoryDaulton,我必须编写所有简化步骤来简化这个长表达式。好吧,顺便说一句,你能告诉我我应该如何制作真值表吗?和哪个表达?变量的输入是什么?如何从该真值表生成简化表达式?

标签: math boolean-logic boolean-expression boolean-operations


【解决方案1】:

(这是对您评论的直接回答,也是对您的主要问题的侧面回答。简而言之,使用不同的方法来获得所需的简化表达式。)

您有一个复杂的表达式,但它只使用了 5 个逻辑变量。在这个问题中,构建一个只有 2^5 = 32 行的真值表会容易得多。您可以查看结果并使用它们来构建简化的等效表达式。这不使用原始问题所需的“定律和属性”,但它是简化布尔表达式的标准技术。

您应该在几乎所有离散数学课程中都学会了如何构建真值表。简而言之,您制作了一个表格,其中每行中的每个元素都是T 对应TrueF 对应False。这些行包含 Ts 和 Fs 的所有可能组合。对于 5 个变量,这将使用 2^5 = 32 行。对于每一行,您将第一个值分配给 A,将第二个值分配给 B,依此类推。然后您计算这些值的表达式并将结果写在行尾。

这可以手动完成,但您的表达方式足够复杂,我们可以避免这种情况。这是一个打印所需表格的 Python 3 脚本。请注意,Python 具有 product() 函数,它简化了获取 Ts 和 Fs 的所有可能组合。该脚本使用B[] 将布尔值转换为单个字符TF

from itertools import product

"""Make a truth table for the Boolean expression
    A.!B.E + !(B.C).D.!E + !(C.D).E+!A.D.!E + A.!(C.D).E + A.E + A.B.!E + !(A.C) + B.C.!D
"""
B = ('F', 'T')
print('A B C D E : Result')
print('- - - - - : ------')
for a, b, c, d, e in product((True, False), repeat=5):
    print(B[a], B[b], B[c], B[d], B[e], end=' : ')
    print(B[
            (a and not b and e)
            or (not (b and c) and d and not e)
            or (not (c and d) and e)
            or (not a and d and not e)
            or (a and not (c and d) and e)
            or (a and e)
            or (a and b and not e)
            or (not (a and c))
            or (b and c and not d)
    ])

结果如下:

A B C D E : Result
- - - - - : ------
T T T T T : T
T T T T F : T
T T T F T : T
T T T F F : T
T T F T T : T
T T F T F : T
T T F F T : T
T T F F F : T
T F T T T : T
T F T T F : T
T F T F T : T
T F T F F : F
T F F T T : T
T F F T F : T
T F F F T : T
T F F F F : T
F T T T T : T
F T T T F : T
F T T F T : T
F T T F F : T
F T F T T : T
F T F T F : T
F T F F T : T
F T F F F : T
F F T T T : T
F F T T F : T
F F T F T : T
F F T F F : T
F F F T T : T
F F F T F : T
F F F F T : T
F F F F F : T

我们看到结果总是T 除了单行T F T F F。这意味着您的表达式为真,除非 A 为真,B 为假,C 为真,D 和 E 为假。所以我们可以将您的表达式(使用您的符号)简化为

!(A.!B.C.!D.!E)

简单地使用德摩根定律将其更改为正常形式:

!A + B + !C + D + E

这就是你想要的。

【讨论】:

  • 非常感谢您,先生,您用简单的话进行了很好的解释。是的,我知道如何制作真值表,因为我学习了离散数学课程并获得了 90%+ 的 A+ 成绩但是这个主题数字电子学,我是新手,不知道如何解决这个问题。非常感谢您的精彩解释。我目前正在学习 C++,所以我对 Python 一无所知,但是查看代码对我来说很有意义,因为我已经几乎精通 C++。我还有一个问题。我们如何用最小项的总和来表示这个简化的表达式(即!A + B + !C + D + E)?
  • @KhubaibKhawar:我不知道什么是“最小条款”。我学的是数学,不是数字电子学,术语可能会有所不同。最后的表达式是析取范式——是一样的吗?
  • 任何布尔表达式的最小项都可以从它的真值表中提取出来,我将使用{0, 1}而不是{T, F}所以,在{0, 1}真值表中,结果显示1,对应于这些结果的行中的变量称为表达式的最小项。
  • @KhubaibKhawar:我不明白“最小条款”的解释。你能给一个完整解释的链接吗?
  • 这里是链接en.wikipedia.org/wiki/Canonical_normal_form#Minterms,您可以在此处阅读有关 mi-terms 的信息。
猜你喜欢
  • 2016-05-15
  • 2014-01-16
  • 2016-07-13
  • 2016-02-20
  • 1970-01-01
相关资源
最近更新 更多