卡诺图是真值表的变形,它可以将有n个变量的逻辑函数的2^n个最小项组织在给定的长方形表格中,同时为相邻最小项(相邻与项)运用邻接律化简提供了直观的图形工具。在部分情况下,卡诺图能让你的逻辑变得一目了然,但是如果需要处理的逻辑函数的自变量较多,卡诺图会使图形更加复杂。
一个简单的例子现有绿、黄、红三颗灯,当满足下面四个条件中任何一个时,需要按下按钮:
绿灯、黄灯、红灯全部都熄灭
黄灯熄灭、红灯亮
绿灯熄灭、黄灯亮
绿灯、黄灯、红灯全部亮起
如果让你写一段代码来判断是需要按下按钮,很多人会这么写:
/** * @parambool $a 绿灯的状态,true为亮,false为熄灭 * @parambool $a 黄灯的状态,true为亮,false为熄灭 * @parambool $a 红灯的状态,true为亮,false为熄灭 * @return bool */ function checkEnterBtn(bool $a, bool $b, bool $c): bool { if ( (!$a && !$b && !$c) || (!$b && $c) || (!$a && $b) || ($a && $b && $c) ) { return true; } return; }