卡诺图求解器

免费在线卡诺图求解器:输入二到六个变量的布尔表达式,即可得到卡诺图,每个分组都已圈出,并从图中读出最简积之和或最简和之积。

输入逻辑表达式进行分析(支持命题逻辑、布尔代数)

仅限客户端 - 您的数据永远不会离开浏览器

指南

点击任一运算符,即可在计算器中运行它的示例。每个运算符都列出了所有可以输入的写法。

输入一个表达式,这个卡诺图求解器会把它的真值按格雷码排布到方格中,圈出每一个可以合并的分组,并从中读出最简形式。它接受符号(¬ ∧ ∨ → ↔)或纯 ASCII(!、&、|、->、<->),支持二到六个变量,并且求出的是精确最小解,而不只是一个不错的解。没有任何内容被上传:卡诺图在你的浏览器中生成。

如何求解卡诺图

  1. 在上方输入框中键入表达式,例如 (A & B) | (!A & C)。如果不想手动输入符号,可以使用运算符键盘。
  2. 求解器从表达式中读出变量,并把真值排入方格。两条轴都按格雷码排列(00、01、11、10),因此相邻格子恰好只差一个变量——这正是一组格子能合并成单个项的原因。
  3. 每一个彩色圈就是一个分组。把鼠标移到图例上的某一组或点按它,即可在图中标出该组;注意标记为「本质」的那些:任何最简形式都不能省略它们。分组可以绕过图的边界,一个格子也可以同时属于多个分组。
  4. 在下方读出最简形式。可在积之和与和之积之间切换,复制结果,载回计算器,或把卡诺图导出为 LaTeX 或 TikZ。

求解器会给你什么

  • 每个分组都圈出并配色,本质分组有标记,并给出各组留下的项。
  • 真正最简的形式:覆盖是精确搜索得来的,不是贪心挑选,因此即使是循环图也能得到最短结果。
  • 在同一张图上给出积之和或和之积——把 1 分组,或把 0 分组。
  • 把卡诺图导出为 LaTeX:可以是普通表格,也可以是带圈和图例的 TikZ 重绘版本。
  • 若在完整计算器中打开同一表达式,还会得到真值表、性质与等价形式。
打开逻辑计算器

一个完整例子

(((A∧B)∧C)∨((A∧B)∧¬C))∨((¬A∧B)∧C) 的卡诺图。有三个格子为真,被两个各含两格的分组覆盖,二者在其中一格重叠——这就是整个方法的缩影:在一个分组内部发生变化的变量会从该组的项中消去,而一个格子可以被覆盖两次。

卡诺图

每个彩色分组覆盖一块为真的矩形。组内发生变化的变量会被消去,因此每个分组留下一个合取项。 如何看懂这张图 →

卡诺图,行为 A,列为 BC
ABC00011110
0
1
最简形式
(B ∧ C) ∨ (A ∧ B)

分组

卡诺图最多能有几个变量?

本求解器绘制 2 到 6 个变量的卡诺图。少于 2 个变量就没有什么可分组的;五个和六个变量画成两张或四张叠放的平面,多于 6 个时即便这样也不再比旁边的真值表更易读了。变量更多时,计算器的等价形式仍会给出化简后的析取范式。

变量数格子数方格
242 × 2
382 × 4
4164 × 4
5322 × (4 × 4)
6644 × (4 × 4)

积之和与和之积

把值为真的格子分组,得到积之和:每组一个合取式,用「或」连接。把值为假的格子分组,则得到和之积,文字在导出时取反:每组一个析取式,用「与」连接。两者描述的是同一个函数,哪个更短取决于 1 和 0 谁能围成更整齐的矩形——所以求解器两种都给,由你取更短的那个。

真值表到表达式将任何真值表转换为逻辑表达式。从您的自定义真值表生成析取范式(DNF)或合取范式(CNF)的布尔公式。

常见问题

关于逻辑计算器使用方式的常见问题解答

卡诺图最多能有几个变量?

本求解器绘制二到六个变量的卡诺图:两个变量是 2 × 2 的方格,三个是 2 × 4,四个是 4 × 4。五个和六个变量按教材的画法,画成两张或四张叠放的 4 × 4 平面,相邻平面上位置相同的格子算作相邻——不涉及叠放变量的分组,在每一张上都是同一个矩形。超过六个变量时,需要在脑中记住的相邻关系就看不出来了,而这正是卡诺图唯一的用处:那时请使用计算器等价形式中的最简析取范式。

积之和与和之积有什么区别?

它们是读同一张图的两种方式。把值为真的格子分组得到积之和:每组一个合取式,用「或」连接。把值为假的格子分组则得到和之积,文字在导出时取反:每组一个析取式,用「与」连接。两者描述的是同一个函数;哪个更短取决于是 1 还是 0 能围成更整齐的矩形,所以求解器两种都给,你取更短的那个。

求解器给出的答案真的是最简形式吗?

是的。先取本质蕴涵项,其余覆盖用分支定界穷尽搜索,而不是贪心挑选。这在循环图上很关键——即没有任何一组是本质的图——因为贪心选择可能停在比最短多一项的覆盖上,而且永远不会告诉你。被支配的行与列会连同本质蕴涵项一起划去,反复进行直到覆盖表不再缩小,所以大多数卡诺图根本走不到搜索这一步——这正是六个变量下精确答案依然瞬时的原因。

为什么列标是 00、01、11、10,而不是 00、01、10、11?

因为正是这个顺序让卡诺图成立。标签按格雷码排列,相邻数值恰好只差一位,因此任意两个相邻格子恰好只差一个变量——于是一块取值相同的矩形就是一个消去了该变量的项。若按普通二进制顺序,01 和 10 会挨在一起,却相差两位,把它们合并没有任何意义。边界会环绕也是同样的道理:第一列与最后一列同样只差一位,所以一个分组可以从一边出去、从另一边接着走。

我可以把格子标为无关项吗?

不能直接标:求解器映射的是一个表达式,而表达式在每一行非真即假,没有第三个值可写。如果某个函数确实忽略某个输入,把这一点写进公式,图上就会显现出来:像 (D | !D) 这样的项会把 D 作为函数并不依赖的变量放进图里——现成的「有效 BCD 数字」卡诺图就是这样构造的。

查看全部问题