[TEAP早期試讀]《程式設計師的數學》- 邏輯工具卡諾圖

flashjerry發表於2012-02-11

圖靈社群按:
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。由此我們可知,在判斷是否按下按鈕時,不需要看黃燈。
卡諾圖通常用於簡化邏輯表示式、設計邏輯迴路等。

相關文章