图灵社区按:
TEAP是什么?TEAP是Turingbook Early Access Program的简称,即早期试读,它公布的是图灵在途新书未经编辑的内容。一本书的翻译周期约为3到6个月,如果在翻译过程中,译者就能与读者进行沟通和交流,对整本书的翻译品质是有帮助的。通过TEAP,读者可以提前阅读将来才能出版的内容,译者也能收获宝贵的反馈意见,改进翻译,提高质量。

本书原名为《プログラマの数学》,中文暂定名为《程序员的数学》,有问题可以在这里留言,也欢迎大家与我或者编辑联系交流,本篇内容选自书中第2章。

作者结城浩(1963年7月 - ),是身在日本东京武藏野市的一位经验丰富的程序员,也是一位资深技术作家。开发出了有名的YukiWiki软件。结城浩经常在杂志上发表程序入门连载文章和翻译技术类文章,除此之外还著有程序、数学方面的图书达30多本,其中有多部被翻译成英语和韩语在国外出版。由他所著的设计模式入门书长期畅销,被媒体誉为日本国内普及设计模式的功臣。

■ 三灯游戏
这回我们看看3个灯会是什么情况。

【三灯游戏的规则】
请在下述情况时按下按钮。
ⓐ 绿灯、黄灯、红灯都灭
ⓑ 黄灯灭,红灯亮
ⓒ 绿灯灭,黄灯亮
ⓓ 绿灯、黄灯、红灯都亮

现在灯泡有绿色、黄色、黄色3种。(图2-31)

图2-31 三灯游戏
enter image description here
图中的文字:
“青いランプ”译为“绿灯”
“黄色いランプ” 译为 “黄灯”
“赤いランプ” 译为 “红灯”
“ボタン” 译为 “按钮”

这回光靠脑袋想可无济于事了吧。还是使用卡诺图看看吧。(图2-32)
设有以下命题
・ 命题A “绿灯亮”
・ 命题B “黄灯亮”
・ 命题C “红灯亮”

画出A、B、C的true/false所有组合的表,在“应该按下按钮”之处打上钩。这次有3个命题,因此表的网格数变为2的3次方 =8个。

图2-32 三灯游戏的卡诺图(打上钩)
enter image description here

注意一下B和C的false/true边界是错位的。而正是由于这个“错位”,使得用8个网格就能表示所有情况。 打上钩后,就像前面那样尽可能用大的框进行分组。(图2-33)

图2-33 三灯游戏的卡诺图(画出框组,思考逻辑表达式)
enter image description here
图中的文字: 
左上文字 译为“这个框组为¬A”
右下文字 译为“这个框组为C”

将所有打钩处都框起来后,我们就来思考表示各个框组的逻辑表达式吧。
・ 横向的框组,就是A为false的区域,因此用¬A来表示。
・ 正中间的框组,就是C为true的区域,因此用C来表示。

根据以上结果,我们将打钩区域用¬A 和C的逻辑或来表示,即
(¬A)∨ C

三灯游戏的规则看起来相当复杂,然而通过使用卡诺图,居然能够使它的表示形式大幅简化。不可思议吧?!
最后得到的逻辑表达式为(¬A)∨ C,表明在三灯游戏中,当“绿灯灭(¬A)”或者“红灯亮(C)”的时候可以按下按钮。
在这个逻辑表达式中没有出现B。由此我们可知,在判断是否按下按钮时,不需要看黄灯。
卡诺图通常用于简化逻辑表达式、设计逻辑回路等。