【问题标题】:Boolean function simplifier?布尔函数简化器?
【发布时间】:2016-08-27 18:15:41
【问题描述】:
x = (a & b & d) | ~(a | ~b | c) | (~c & ~d & a) | (c & d)

~ = not
& = and
| = or

如何简化这样的函数,我应该从什么开始? 我尝试了一些简化程序,但我不明白。

【问题讨论】:

  • 这是作业还是您正在尝试解决“现实世界”的问题?
  • 我正在努力拯救世界 ok
  • 写出真值表,然后将其视为Karnaugh Map
  • Logic Friday 对这种事情有好处,假设您知道自己在做什么(警告:仅限 Windows)。
  • 坏你们在帖子上给我缺点我只是想帮助所以粗鲁

标签: boolean-logic


【解决方案1】:

你应该为所涉及的变量和最终输出写出一个真值表。

然后,对于真值表中被证明为真的每一行,您根据变量的状态编写一个逻辑方程来重现该逻辑“一”,通常是适当输入和逆的 AND 函数输入。

假设只有 3 行具有真或逻辑 1 输出。 这意味着您将拥有三个逻辑方程式。 您可以通过使用 OR 运算符将这三个方程连接在一起来完成这项工作。

通过查看真值表,您可能会注意到逻辑真线的输出并不依赖于所有变量。这是简化表达式的一种方式。

求解一个类似于你上面提到的方程 (a & b & d) | (~a | b | ~c) | (~c & ~d & a) | (c & d)

我得到以下结果

x = 1 除了一种情况,即 (a b c d) = (1 0 1 0),在这种情况下它为零。 因此 x = ~( a & ~b & c & ~d) 或 x = ~a |乙 | 〜c | d

如何做到这一点? 为了更容易做到这一点,您可以将方程式重写为

 x = A | B | C | D, where

 A =  (a &  b & d)
 B = (~a | b | ~c)
 C =  ~c & ~d & a
 D =   c &  d

变量 B = 1 对于 (abcd) 的两组输入(即 (1010) 和 (1011) 除外)。

变量 A = 1 仅适用于 B 已经涵盖的两个输入集。

与变量 C 类似。

对于两组输入 B 中的一组输入,变量 D = 1 没有使 = 1,即 (1011)。

因此 x = 0 仅当输入恰好为 a=1、b=0、c=1、d=0 时,但我们希望将其写为当这些输入给定时为真 (=1) 的方程,所以我们写

 x = ~(a & ~b & c & ~d) or x = ~a | b | ~c | d

所以这是一种简化的方法。我将在单独的答案中添加第二种技术。

很抱歉花了这么长时间才把它拼出来,但也许其他人会觉得它有用。

OP 的原始方程已被相当简化。真值表具有几乎相等的 T 和 F 条目,因此不适合演示该技术。可以将其重写为

 x = (a & b & d) | (~a & b & ~c) | (a & ~c & ~d) | (c & d)

它相当紧凑,但结合第一个和最后一个术语以及中间两个术语可能会略有不同: x = ((a & b | c) & d) | ((~a & b | a & ~d) & ~c) 请参阅下面的第二个建议答案以获得进一步的解释

【讨论】:

  • 我找到了一些旧笔记,会做这样的事情,谢谢热博伊
  • 这个问题有点含糊。您还可以使用Quine-McCluskey algorithm 最小化函数,或通过将函数重写为正常形式(例如conjunctive normal form)来“简化”函数。
【解决方案2】:

另一种简化方法是将方程视为具有乘法和加法的代数问题,其中使用分配定律。我将在“或”函数中使用“+”号,以便更容易查看连接。

例如,你的第一个和最后一个词可以写成:

a & b & d + c & d

你可以写成 (a & b + c) & d

有时会有所帮助

假设您有术语 E 和 F,它们将被“和”在一起,而不是“或”在一起。

E= (~a | b | ~c)

F= ~c & ~d & a

你会写 E & F =

(~a + b + ~c) & (~c & ~d & a)

然后您可以将其扩展为:

= ~a & (~c & ~d & a) + b & (~c & ~d & a) + ~c & (~c & ~d & a)

因为 ~a & a 总是 = 0 而 ~c & ~c 总是 = 1

E & F = b & ~c & ~d & a + ~d & a

  = a & b & ~c & ~d + a & ~d

但可以进一步简化

E & F = (a & ~d) & (b & ~c + 1),但 b & ~c + 1 总是 = 1,所以

E & F = a & ~d

这种技术可用于简化类似于您上面给出的逻辑方程。

并记住 ~(a + b) = ~a & ~b,我忘记了,因此不得不使用与上面发布的示例略有不同的示例

【讨论】:

  • 最初从 ~(a + ~b + c) 到 ~a & b &~c 有一个错误,所以我将我正在使用的术语更改为 (~a + b + ~ c)
猜你喜欢
  • 2018-09-01
  • 2013-09-15
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多