布爾代數入門

2021-02-18 算法與數據結構

來自:阮一峰的網絡日誌

作者:阮一峰

連結:http://www.ruanyifeng.com/blog/2016/08/boolean-algebra.html(點擊尾部閱讀原文前往)

布爾代數是計算機的基礎。沒有它,就不會有計算機。

布爾代數發展到今天,已經非常抽象,但是它的核心思想很簡單。本文幫助你理解布爾代數,以及為什麼它促成了計算機的誕生。

我依據的是《編碼的奧妙》的第十章。這是一本好書,強烈推薦。



一、數理邏輯的起源

19世紀早期,英國數學家喬治·布爾(George Boole,1815-1864)突發奇想:人的思想能不能用數學表達?

此前,數學只用於計算,沒有人意識到,數學還能表達人的邏輯思維。


兩千年來,哲學書都是用文字寫的。比如,最著名的三段論:

所有人都是要死的, 
蘇格拉底是人, 
所以,蘇格拉底是要死的。

喬治·布爾認為,這種推理可以用數學表達,也就是說,哲學書完全可以用數學寫。這就是數理邏輯的起源。

二、集合論

喬治·布爾發明的工具,叫做"集合論"(Set theory)。他認為,邏輯思維的基礎是一個個集合(Set),每一個命題表達的都是集合之間的關係。


比如,所有人類組成一個集合R,所有會死的東西組成一個集合D。

所有人都是要死的

集合論的寫法就是:

R X D = R

集合之間最基本的關係是併集和交集。乘號(X)表示交集,加號(+)表示併集。上面這個式子的意思是,R與D的交集就是R。

同樣的,蘇格拉底也是一個集合S,這個集合裡面只有蘇格拉底一個成員。

蘇格拉底是人 
// 等同於 
S X R = S

上面式子的意思是,蘇格拉底與人類的交集,就是蘇格拉底。

將第一個式子代入第二個式子,就得到了結論。

S X (R X D) 
= (S X R) X D 
= S X D 
= S

這個式子的意思是,蘇格拉底與會死的東西的交集,就是蘇格拉底,即蘇格拉

底也屬於會死的東西。

三、集合的運算法則

前面的三段論比較容易,一眼就能看出結論。但是,有些三段輪比較複雜,不容易立即反應過來。

請看下面這兩句話。

"鴨嘴獸是卵生的哺乳動物。鴨嘴獸是澳洲的動物。"

你能一眼得到結論嗎?

鴨嘴獸 X 卵生 = 鴨嘴獸 
鴨嘴獸 x 澳洲 = 鴨嘴獸

將第一個式子代入第二個,就會得到:

鴨嘴獸 X 卵生 x 澳洲 = 鴨嘴獸 
// 相當於 
卵生 x 澳洲 = 鴨嘴獸 + 其他

因此,結論就是"有的卵生動物是澳洲的動物",或者"有的澳洲的動物是卵生動物"。

還有更不直觀的三段論。

"哲學家都是有邏輯頭腦的,一個沒有邏輯頭腦的人總是很頑固。"

請問結論是什麼?

這道題會用到新的概念:全集和空集。集合A和所有不屬於它的元素(記作-A)構成全集(I),這時A和-A的交集就是一個空集(0)。

A + (-A) = I 
A X (-A) = 0

因此,有下面的公式。


= B X I 
= B X (A + -A) 
= B X A + B X (-A)

回到上面那道題。

哲學家 X 邏輯 = 哲學家 

無邏輯 X 頑固 = 無邏輯

根據第一個命題,可以得到下面的結論。

哲學家 X 無邏輯 
= (哲學家 X 邏輯) X 無邏輯 
= 哲學家 X (邏輯 X 無邏輯) 
= 哲學家 X 0 
= 0

即哲學家與沒有邏輯的人的交集,是一個空集。

根據第二個命題,可以得到下面的結論。

無邏輯 X 頑固 
= 無邏輯 X 頑固 X (哲學家 + 非哲學家) 
= 無邏輯 X 頑固 X 哲學家 + 無邏輯 X 頑固 X 非哲學家 
= 0 X 頑固 + 無邏輯 X 頑固 X 非哲學家 
= 無邏輯 X 頑固 X 非哲學家 
= 無邏輯

也就是說,最終的結論如下。

無邏輯 X 頑固 X 非哲學家 = 無邏輯 
// 相當於 
頑固 X 非哲學家 = 無邏輯 + 其他

結論就是頑固的人與非哲學家之間有交集。通俗的表達就是:一些頑固的人,不是哲學家,或者一些不是哲學家的人,很頑固。

由此可見,集合論可以幫助我們得到直覺無法得到的結論,保證推理過程正確,比文字推導更可靠。



四、 集合論到布爾代數


既然命題可以用集合論表達,那麼邏輯推導無非就是一系列集合運算。

由於集合運算的結果還是集合,那麼通過判斷個體是否屬於指定集合,就可以計算命題的真偽。

一名顧客走進寵物店,對店員說:"我想要一隻公貓,白色或黃色均可;或者一隻母貓,除了白色,其他顏色均可;或者只要是黑貓,我也要。"

這名顧客的要求用集合論表達,就是下面的式子。

公貓 X (白色 + 黃色) 
+ 母貓 X 非白色 
+ 黑貓

店員拿出一隻灰色的公貓,請問是否滿足要求?

布爾代數規定,個體屬於某個集合用1表示,不屬於就用0表示。 灰色的公貓屬於公貓集合,就是1,不屬於白色集合,就是0。

上面的表達式變成下面這樣。

1 X (0 + 0) 
+ 0 X 1 
+ 0 
= 0

因此,就得到結論,灰色的公貓不滿足要求。

這就是布爾代數:計算命題真偽的數學方法。

五、布爾代數的運算法則

布爾代數的運算法則與集合論很像。

交集的運算法則如下。

1 X 1 = 1 
1 X 0 = 0 
0 X 0 = 0

併集的運算法則如下。

1 + 1 = 1 
1 + 0 = 1 
0 + 0 = 0

集合論可以描述邏輯推理過程,布爾代數可以判斷某個命題是否符合這個過程。人類的推理和判斷,因此就變成了數學運算。

20世紀初,英國科學家香農指出,布爾代數可以用來描述電路,或者說,電路可以模擬布爾代數。於是,人類的推理和判斷,就可以用電路實現了。這就是計算機的實現基礎。



六、布爾代數的局限

雖然布爾代數可以判斷命題真偽,但是無法取代人類的理性思維。原因是它有一個局限。

它必須依據一個或幾個已經明確知道真偽的命題,才能做出判斷。比如,只有知道"所有人都會死"這個命題是真的,才能得出結論"蘇格拉底會死"。

布爾代數只能保證推理過程正確,無法保證推理所依據的前提是否正確。如果前提是錯的,正確的推理也會得到錯誤的結果。而前提的真偽要由科學實驗和觀察來決定,布爾代數無能為力。

●本文編號209,以後想閱讀這篇文章直接輸入209即可。

●輸入m可以獲取到文章目錄。

更多推薦請看15個技術類公眾微信

涵蓋:程序人生、算法與數據結構、黑客技術與網絡安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。傳播計算機學習經驗、推薦計算機優秀資源:點擊前往《值得關注的15個技術類微信公眾號

相關焦點

  • 布爾代數與邏輯
    布爾代數與邏輯義概念代數學從布爾代數生成。
  • 零基礎學習計算機原理:布爾代數與邏輯門
    最關鍵的原因是,在當時,有一整個數學分支存在,專門處理"真"和"假",它已經解決了所有法則和運算,叫"布爾代數"(Boolean Algebra)!布爾代數是計算機的基礎。沒有它,就不會有計算機。所有數字晶片,從設計到生產,每一個環節都離不開布爾代數。
  • 布爾代數——邏輯代數創始人布爾
    17世紀萊布尼茨(Gottfried Wilhelm von Leibniz)首先試圖用一套符號和關係來規定邏輯學,但沒能成功。到19世紀邏輯學已經漸漸成為一門精密學科,英國數學也從牛頓體系中解放出來,布爾代數也就適時應運而生了。
  • 現在計算機離不開的布爾代數究竟是什麼?
    布爾代數從列外一個角度實現了萊布尼茨的願景,也就是說必須把對這種演算規則的真正作用的見解,看作是萊布尼茨的最偉大發現之一,並看作是一般人類精神的最精彩的發現之一。也就是說通過演算規則能夠得出什麼的話,是萊布尼茨最精彩的部分。在布爾《思維規律的研究》書裡面,完滿地討論了這個主題,並奠定了所謂符號邏輯的基礎。因為布爾的那套東西完全的符號化了,完全代數化了。
  • 【瀚海數據說】計算機基本原理(一):數學邏輯,布爾代數,邏輯門
    在布爾代數中,用字母代表集合,仍然用運算符、等於號和數字組成方程,只不過布爾代數運算符的含義與傳統代數不同。在布爾代數中,運算符「+」意味著兩個集合合併,如圖2所示:A集合用紅色圓圈表示,B集合用藍色圓圈表示,A+B就是A集合與B集合的合併,圖中用綠色表示。
  • 紀念:布爾代數發明人——喬治布爾200年誕辰
    在這本書中布爾介紹了現在以他的名字命名的布爾代數。喬治·布爾是皮匠的兒子,由於家境貧寒,布爾不得不在協助養家的同時為自己能受教育而奮鬥,不管怎麼說,他成了19世紀最重要的數學家之一。儘管他考慮過以牧師為業,但最終還是決定從教,而且不久就開辦了自己的學校。在備課的時候,布爾不滿意當時的數學課本,便決定閱讀偉大數學家的論文。
  • 從異類聯想的布爾代數、開關電路到存儲程序控制、大規模集成電路
    事實上,在布爾代數提出後80多年裡,它確實沒有什麼像樣的應用,直到1938年香農在他的碩士論文中指出用布爾代數來實現開關電路,才使得布爾代數成為數字電路的基礎。所有的數學和邏輯運算,加、減、乘、除、乘方、開方,等等,全都能轉換成二值的布爾運算。
  • 誰家學霸兩百年:從布爾代數到人工智慧
    圖片來源:wikipedia.org撰文 | 黃鐵軍(北京大學信息科學技術學院教授,計算機科學技術系系主任)責編 | 邸利會● ● ●布爾(George Boole)就是布爾代數那個布爾[1,2],辛頓(Geoffrey Hinton)就是深度學習這個辛頓
  • 學習編程道路上的入門書籍之C篇
    學習編程專欄連載編程學習編程道路上的入門書籍之C篇,此篇內容將包含一些算法以及數據結構相關內容,文章中的所有推薦的書籍均來自知乎社區大牛力薦書籍、豆瓣評分較高書籍、各語言社區比較熱門書籍以及京東、亞馬遜、噹噹熱銷書籍的重合書籍。
  • 動漫手繪入門技巧 動漫手繪入門方法
    動漫手繪入門技巧有哪些?動漫手繪入門的方法有沒有呢?很多學動漫手繪的小夥伴都希望可以找到捷徑,其實學動漫手繪還是需要一步步來實現的!動漫手繪入門第一步要解決的就是手抖的問題,手抖的話會讓你畫的線條很碎,這是很多繪畫初學者都會遇到的問題。
  • 韓語入門
    圖片來自網絡:http://www.bqb12.com/biaoqing/120074 那怎麼入門呢? 入門任何一門新的外語,我通常會做以下幾個工作:1.    了解這門外語的字母構造和發音規則2.
  • 機器學習入門
    ie=UTF8&qid=1510373138&sr=8-1&keywords=機器學習實戰4.斯坦福公開課:http://open.163.com/special/opencourse/machinelearning.html     入門階段要有普通工科專業大一大二那幾門基礎數學課「線性代數」,「高數」,「概率論與數理統計
  • 新手學漫畫怎麼入門?漫畫初學入門教程
    新手學漫畫怎麼入門?漫畫初學入門教程!喜歡畫畫的小白們還在入坑的邊緣來回徘徊猶豫就會敗北?微課菌經常能在私信中看到這樣的字眼:「初學者如何學畫」、「怎樣入門」「學漫畫入門怎麼學習」等相關問題。所以今天出一期漫畫新手常見問題解答特輯,給想學漫畫的萌新解除一些不必要的疑惑!
  • Python入門
    今天,Leon就來和各位盤道盤道Python如何入門。(這裡,Leon僅僅針對於Python做科學計算的入門進行介紹) 做科學計算一般大家會用到兩種語言:Matlab或Python。如果你有Matlab的編程經歷再去入門Python,那麼這個過程將會更加的簡答。