bitGateLab Digital · 学习
中文(简体)
打开模拟器

学习 › 第 5 讲

奎因-麦克拉斯基(Quine-McCluskey)法分步详解

阅读约 7 分钟 · bitGateLab 团队

卡诺图处理四个变量很快,但它依赖你的眼力,变量达到五个或更多时就不再实用。奎因-麦克拉斯基法用表格和机械的规则完成同样的工作:它不需要直觉,总能找出全部质蕴含项,也是逻辑函数化简程序的基础。本文将带你理解它的两个阶段,学会识别必要质蕴含项,并完整地做一道四变量例题。

术语:蕴含项与质蕴含项

这种方法分两个阶段:首先通过合并各项找出全部质蕴含项;然后选出能覆盖所有最小项的、数量最少的一组质蕴含项。

第 1 阶段:合并各项

每一项都用二进制写出,被消去的变量所在的位置用一条短横线标记。例如,变量为 A、B、C、D 时,0-11 这一项表示 ACD(B 已被消去)。

  1. 按二进制代码中 1 的个数把最小项分组。
  2. 把一组中的每一项与下一组中的每一项逐一比较。如果它们只有一位不同,就把它们合并,在那一位上写短横线,并把原来的两项标记为“已使用”。
  3. 对新得到的列表重复上述过程。只有短横线位置完全相同的项才能合并。
  4. 当再也无法合并时,那些始终没有被标记的项就是质蕴含项。
按 1 的个数排序可以省不少事:只有一位不同的两项总是位于相邻的两组中,所以你永远不必拿第 1 组去和第 3 组比较。

第 2 阶段:质蕴含项表

列一张表,每个质蕴含项占一行,函数的每个最小项占一列(无关项不设列)。在表中标出每个质蕴含项覆盖了哪些最小项。然后:

  1. 找出只有一个标记的列。该标记所在行的质蕴含项是必要的:选中它,并划去它覆盖的所有列。
  2. 对剩下的列,选出数量最少、能把它们全部覆盖的质蕴含项。如果两个质蕴含项覆盖的列相同,选哪个都行;优先选文字较少的那个。

完整例题。化简 F(A, B, C, D) = Σm(0, 2, 3, 5, 7, 8, 10, 11, 13, 15)。

第 1 步:按 1 的个数分组。

1 的个数最小项
00 (0000)
12 (0010), 8 (1000)
23 (0011), 5 (0101), 10 (1010)
37 (0111), 11 (1011), 13 (1101)
415 (1111)

第 2 步:第一次合并(两两成对)。比较相邻的组。8 不能与 3 或 5 合并,因为它们相差不止一位。

组得到的对
0 和 1(0,2) 00-0; (0,8) -000
1 和 2(2,3) 001-; (2,10) -010; (8,10) 10-0
2 和 3(3,7) 0-11; (3,11) -011; (5,7) 01-1; (5,13) -101; (10,11) 101-
3 和 4(7,15) -111; (11,15) 1-11; (13,15) 11-1

十个最小项全都被标记为已使用;共得到 13 对。

第 3 步:第二次合并(四项一组)。把短横线位置相同且只有一位不同的对合并起来:

  • (0,2) 与 (8,10),或者 (0,8) 与 (2,10):-0-0,覆盖 0、2、8、10。
  • (2,3) 与 (10,11),或者 (2,10) 与 (3,11):-01-,覆盖 2、3、10、11。
  • (3,7) 与 (11,15),或者 (3,11) 与 (7,15):--11,覆盖 3、7、11、15。
  • (5,7) 与 (13,15),或者 (5,13) 与 (7,15):-1-1,覆盖 5、7、13、15。

13 对都在某个四项组中用到了。这四个四项组彼此之间不能再合并(没有哪两个短横线位置相同且只有一位不同)。因此,质蕴含项为:

  • P1 = -0-0 = BD
  • P2 = -01- = BC
  • P3 = --11 = CD
  • P4 = -1-1 = BD

第 4 步:覆盖表。

质蕴含项02357810111315
P1 BD✔✔✔✔
P2 BC✔✔✔✔
P3 CD✔✔✔✔
P4 BD✔✔✔✔

第 5 步:必要质蕴含项。第 0 列和第 8 列只在 P1 行有标记,所以 P1 是必要的。第 5 列和第 13 列只在 P4 行有标记,所以 P4 也是必要的。两者合起来覆盖了 0、2、5、7、8、10、13 和 15。

第 6 步:覆盖剩余部分。还剩最小项 3 和 11。P2 能同时覆盖这两个,P3 也能。两者中任选一个都能得到完整的解,文字数相同。

结果:F = BD + BD + BC,或者 F = BD + BD + CD。两者都是三项、六个文字。

如果把这个函数画在卡诺图上,P1 是四个角,P4 是中间的方块,P2 是 00 行和 10 行(通过边界相连)的 11、10 两列,P3 是整个 11 列。列表法不需要看图就得到了同样的结果。

无关项与循环表

无关项 X 在第 1 阶段被当作 1 一并纳入,因为它们可能有助于形成更大的蕴含项。在第 2 阶段则把它们略去:它们不设列,因为并不要求覆盖它们。完全由 X 构成的质蕴含项永远用不上。

有时,在选完必要质蕴含项之后,或者从一开始,每一列就都至少有两个标记,没有明显的办法做出选择。这种情况称为循环表。解决办法是试探:选一个质蕴含项,去掉它覆盖的列,然后重复,再比较得到的各个解。对于大的表,有一种代数方法(Petrick 法)可以列举出所有可能的覆盖。

常见错误

在模拟器中试一试

模拟器正是用这一类方法来化简函数的,所以你可以用它来核对手算的每个阶段。

  1. 新建一个四变量真值表,把例题中的各个最小项标为 1。
  2. 在纸上完成第 1、2 阶段,写下你的结果。
  3. 观察工具给出的最简表达式及其卡诺图;找出每个质蕴含项对应的是哪个圈。
  4. 把两个可能的解都在同一画布上转换成电路,改变输入,确认它们的输出始终相同。

练习

  1. 求 F(A, B, C, D) = Σm(0, 1, 3, 7, 8, 9, 11, 15) 的质蕴含项和最简表达式。
    答案

    质蕴含项:-00-(BC)、-0-1(BD)和 --11(CD)。第 0 列只被 BC 覆盖,第 7 列只被 CD 覆盖:两者都是必要的,并且合起来覆盖了全部最小项。F = BC + CD。质蕴含项 BD 是多余的。

  2. 求解 F(A, B, C) = Σm(0, 1, 2, 5, 6, 7)。有必要质蕴含项吗?
    答案

    得到的对是 00-、0-0、-01、-10、1-1 和 11-,其中没有哪两对能合并成四项组:共有六个质蕴含项。每个最小项都恰好被两个质蕴含项覆盖,所以没有必要质蕴含项(循环表)。有两个最简解:AB + BC + AC,或 AC + BC + AB。

  3. 化简 F(A, B, C, D) = Σm(2, 3, 7, 9, 11, 13) + d(1, 10, 15)。
    答案

    在第 1 阶段把 X 一并纳入,得到四个质蕴含项:-0-1(BD)、-01-(BC)、--11(CD)和 1--1(AD)。在表中(不为 1、10、15 设列):2 只被 BC 覆盖,7 只被 CD 覆盖,13 只被 AD 覆盖。三者都是必要的,并且同时覆盖了 3、9 和 11。F = BC + CD + AD。

  4. 在第 1 阶段,为什么不拿含一个 1 的组去和含三个 1 的组比较?
    答案

    因为分别含一个 1 和三个 1 的两个代码至少有两位不同,而要合并必须恰好只有一位不同。