# 卡诺图

> 计算机科学 · CIE A-Level
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u3-karnaugh-maps/

卡诺图（K-map）是化简布尔表达式的图形方法，用于设计最简组合逻辑电路。本指南涵盖2-4变量卡诺图、质蕴含项和无关项处理。

**先修:** [布尔代数与逻辑门](https://www.owlsprep.com/zh/study/cie-9618-u3-boolean-algebra/); [积之和（SOP）形式](https://www.owlsprep.com/zh/study/cie-9618-u3-sop-pos-forms/)

## 学习目标

- 根据真值表或布尔表达式构建2变量、3变量和4变量卡诺图
- 识别质蕴含项和必要质蕴含项以得到最简化简结果
- 使用卡诺图化简积之和布尔表达式
- 处理无关项条件以得到更简单的表达式

## 卡诺图简介

卡诺图是真值表的图形化重排，每个单元格对应一种输入变量组合。相邻单元格仅相差一个输入变量，因此可以对1值分组合并，消除冗余变量。

**卡诺图** — 基于网格的布尔表达式化简图形工具，利用相差一个变量的单元格邻接性消除冗余项

*记法:* $2^n$ cells for $n$ input variables

*例:* 2变量卡诺图有4个单元格，排列为2×2网格

**例题:** 为$F(A,B) = A'B + AB' + AB$绘制2变量卡诺图

1. 列出所有输入组合，标记出$F = 1$的位置：
2. $$F = 1 \text{ for } A'B, AB', AB \text{, } F = 0 \text{ for } A'B'$$
3. 将单元格排列为2×2网格，行（A）和列（B）使用格雷码顺序 (0, 1)
4. 完成后的卡诺图中，单元格 (0,1)、(1,0)、(1,1) 为1，(0,0) 为0

## 分组规则与最简积之和

卡诺图化简的核心是将相邻1值分组为边长为2的幂（1、2、4等）的矩形。更大的分组可以得到更简单的最终表达式，因为它们消除了更多变量。

**必要质蕴含项** — 一个质蕴含项（最大有效分组），它至少覆盖一个未被任何其他质蕴含项覆盖的1，因此必须包含在最终表达式中

> **tip**
>
> 始终先寻找尽可能大的分组，从必要质蕴含项开始，避免最终表达式中出现不必要的项。

**例题:** 化简$F(A,B) = A'B + AB' + AB$的2变量卡诺图

1. 识别最大可能分组：列$B=1$中的两个1（$A'B + AB$）可以分组消除$A$，得到$B$
2. 行$A=1$中的两个1（$AB' + AB$）可以分组消除$B$，得到$A$
3. 所有1都被这两个分组覆盖，因此最简积之和表达式为：
4. $$F = A + B$$

**概念自测**

检查你对分组规则的理解

1. 以下哪个分组在卡诺图中是有效的？

   - 一行3个相邻的1
   - 4个相邻的1排列成2×2正方形
   - 对角相邻的2个1

   *答案:* 4个相邻的1排列成2×2正方形

   *解析:* 分组大小必须是2的幂，且邻接仅为水平/垂直（对角线无效）。

## 3变量和4变量卡诺图

3变量卡诺图为2×4网格，4变量卡诺图为4×4网格。一个常被忽略的关键规则：卡诺图的上下边缘和左右边缘是循环邻接的，因此第一行/列和最后一行/列相邻。

> **info**
>
> 4个值的格雷码顺序始终是 00, 01, 11, 10。这确保相邻单元格仅相差一个变量。

**例题:** 化简$F(A,B,C) = \Sigma m(0,1,2,3,4,6)$

1. 绘制2×4卡诺图，为所有列出的最小项标记1
2. 最大可能分组是$A=0$行的全部4个1，该分组消除了$A$和$B$，留下$C'$
3. 剩余的1（$m4, m6$）相邻，分组后消除$B$，得到$AC'$
4. 化简结果得到最简表达式：
5. $$F = A' + C'$$

## 无关项条件

无关项是实际中永远不会出现的输入组合，因此其输出可设为0或1来帮助得到更简单的最终表达式。在卡诺图中它们被标记为$X$。

> **tip**
>
> 尽可能使用$X$来扩大你的分组，但最终分组中不需要覆盖所有$X$，只需要覆盖所有1即可。

**例题:** 化简$F(A,B,C,D) = \Sigma m(1,3,5,7,9) + d(10,11,12,13,14,15)$

1. 在4×4卡诺图上，将所有最小项标记为1，无关项标记为$X$
2. 所有1都在$D=1$列。利用6个无关项形成一个覆盖所有$D=1$单元格的8单元格分组，消除$A, B, C$
3. 所有1都被这个分组覆盖，因此最简表达式为：
4. $$F = D$$

## 常见错误

- **错误做法:** 形成3或5个单元格的分组，或对对角的1进行分组
  - 原因: 分组大小必须是2的幂，且仅水平/垂直邻接有效
  - 正确做法: 仅形成水平或垂直邻接、大小为1, 2, 4, 8等2的幂的分组
- **错误做法:** 忘记卡诺图边缘是循环邻接的
  - 原因: 你会错过跨越卡诺图边缘的更大有效分组，导致表达式不是最简的
  - 正确做法: 始终检查分组是否可以环绕上下或左右边缘
- **错误做法:** 使用二进制顺序 (00, 01, 10, 11) 而非格雷码
  - 原因: 相邻单元格会相差两个变量，因此分组会得到错误的项
  - 正确做法: 对所有4值卡诺图轴使用标准格雷码顺序 00, 01, 11, 10
- **错误做法:** 将无关项X视为必须被覆盖的1
  - 原因: 这会给最终表达式添加不必要的项，使其不是最简的
  - 正确做法: 仅使用X来扩大1的分组，不需要覆盖X

## 速查表

| 规则 | 说明 |
| --- | --- |
| 分组大小 | 必须为2的幂 (1, 2, 4, 8...) |
| 邻接规则 | 仅水平/垂直，边缘循环邻接，不允许对角线 |
| 格雷码顺序 | 4值序列: 00 → 01 → 11 → 10 |
| 必要质蕴含项 | 必须包含在最终表达式中 |
| 无关项X | 可用于分组，不需要覆盖 |
| 最简积之和 | 必要质蕴含项之和 + 额外项以覆盖所有1 |

## 下一步

卡诺图是手工化简最多4变量布尔表达式的主要方法，是CIE A-Level计算机科学考试中非常常见的考点。对于超过4变量的情况，会使用奎因-麦克拉斯基这类自动化方法，但卡诺图足以应对所有考试级别的题目，并且能培养组合逻辑电路设计的核心直觉。掌握卡诺图化简对于时序逻辑设计这类高级主题必不可少，在时序逻辑设计中需要化简后的次态和输出表达式来构建高效、低成本的数字逻辑电路。

- [布尔代数](https://www.owlsprep.com/zh/study/cie-9618-u3-boolean-algebra/)
- [计算机体系结构](https://www.owlsprep.com/zh/study/cie-9618-u3-computer-architecture/)
- [输入输出设备](https://www.owlsprep.com/zh/study/cie-9618-u3-input-and-output-devices/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u3-karnaugh-maps/
