【发布时间】:2017-02-20 02:57:24
【问题描述】:
我试图找出函数 F(w, x, y, z) = sum (0, 2, 5, 7, 8, 10, 12, 13, 14, 15) 的质蕴涵项。我得到了 xz 的基本质蕴涵项。我想知道是否还有更多基本的质蕴涵项?我很难理解如何找到它们。
【问题讨论】:
我试图找出函数 F(w, x, y, z) = sum (0, 2, 5, 7, 8, 10, 12, 13, 14, 15) 的质蕴涵项。我得到了 xz 的基本质蕴涵项。我想知道是否还有更多基本的质蕴涵项?我很难理解如何找到它们。
【问题讨论】:
质蕴涵项是最小 DNF(析取范式;SOP = 乘积之和)或最小 CNF(合取范式;POS = 和的乘积)形式的逻辑术语,在删除它的任何部分后它不会是不再是输出函数的质蕴涵项。
考虑这个更简单的例子:
a\b 0 1
+---+---|
0 | 0 | 0 |
1 | 0 |(1)|
+---+---+
您可以将 DNF 形式的输出函数编写为文字值位置的最小术语:a=1,b=1(由 K-map 中的括号“圈出”):
y = a*b
它是主蕴涵项,因为如果您删除任何文字(变量或变量的否定),它将不再是输出函数的蕴涵项!
这里您只有两个变量,因此您可以从正确的输出函数定义y = a*b 中删除 a(a 或其否定)或 b(b 或其否定)。
从 y = a*b 中删除 b,您可以在位置 a=1、b=0 上圈出一个 零:
a\b 0 1
+---+---|
0 | 0 | 0 |
1 |(0 1)|
+---+---+ wrong_output_function: y1 = a
或在a=0、b=1 的位置圈出一个不需要的 零,方法是删除 a(a 或其否定):
a\b 0 1
+---+---|
0 | 0 |(0)|
1 | 0 |(1)|
+---+---+ wrong_output_function: y2 = b
在这个例子中,通过选择在 DNF 中表达输出函数,你想圈出所有 ones 和 NO zero,这就是为什么所有这两个布尔表达式 y1 和 y2错了。
举个例子:
为了找到最小的 DNF 形式,您希望找到可能的最大组(术语),它们中的变量数量可能最少,在这种情况下不会威胁输出函数的有效性,在任何一个中添加一个零组(输出函数的蕴涵项)。
在这里您可以看到,一些组重叠,但这没关系,因为根据定义,这些组具有最小形式。这个 K-map 是最小的,因为你不能让选择的组更大。
例如,您可以分别圈出未被绿色圆圈捕获的红色组,但在这种情况下,它们不会是质蕴涵项,因为您可以使它们的组更大,如之前的卡诺图所示。因此,这个 K-map 不是最小的,因为存在非质蕴涵项。
注意:你函数中的索引与我的 K-map 中的索引不匹配,因为变量的排列不同。我的 K-map 匹配原始 K-map 样式中变量的位置。输出函数就是以此为基础的。
【讨论】: