學會寫程式,從數學思維與邏輯訓練開始
沒有艱難的數學式,
而是透過情境對話和關鍵提示來引導你的思考方向。
發掘數字規則、拆解複雜問題、提升分析能力……
幫助程式設計師強化學習程式,
也適合程式設計門外漢,
或是「一看見數學式就想跳過」的人!
★★臺灣大學資訊管理學系副教授 孔令傑 審訂推薦★★
▌強師推薦
楊宗穎 │ 北一女中數學科老師
人類與程式的距離,
只會愈來愈近。
從網站設計、數據分析到人工智慧,
都與程式設計密切相關。
想要進入奧妙的程式世界,
必須先體會數學的趣味與美!
★ 0不僅是用來描述「什麼都沒有」,更蘊含了「無即是有」的重要啟發。
★ 原來大海可以撈針!利用指數爆發的力量,可以幫你揪出犯人、鎖定目標。
★ 想要從複雜問題的重重迷霧中找到答案蹤跡,就先從「自己」身上尋找線索吧!
★ 看不到盡頭在哪?數學歸納法教你只要跨出兩步,就能走到「無窮」的彼端。
用數學力開啟你對程式設計的想像,
自學程式設計必備的數學工具讓你輕鬆get!
學會寫程式,等同掌握了工作接案的熱門技能。
你也可以是人生勝利組!
作者簡介:
結城 浩
1963年生。2014年獲得日本数学会出版賞。執筆寫作有關程式語言、設計模式、密碼、數學等領域的入門書。最新著作是「數學女孩系列」。是一個最喜歡巴哈的「賦格的藝術」作品的新教基督徒。出版有2011《數學女孩/費馬最後定理》、2012《數學女孩/哥德爾不完備定理》、2013《數學女孩/隨機演算法》、2014《數學女孩/伽羅瓦理論》(世茂出版)、2016—2017《數學女孩秘密筆記》系列。
譯者簡介:
衛宮紘
清華大學原子科學院學士班畢。現為自由譯者。譯作有《上司完全使用手冊》(東販)、《超慢跑入門》(商周)、《男人懂了這些更成功》(潮客風)、《世界第一簡單電力系統》(世茂)等。
賜教信箱:emiyahiro@hotmail.com.tw
章節試閱
數學思維的例子
「數學思維」感覺過於抽象,以下就稍微舉例說明!
【條件分歧與邏輯】
在設計程式時,我們會根據條件來「分歧」處理,C、Java 等多數程式語言是使用if 敘述。若滿足條件,執行這邊的處理;若不滿足條件,執行那邊的處理,像這樣控制處理的流程。此時,我們是使用數學領域中的「邏輯」來控管程式,因此在程式設計上,必須熟習「且」「或」「非……」「若……則……」等邏輯要素。
【循環與數學歸納法】
為了處理大量資訊,我們會使用程式來執行「循環」。例如,使用for敘述能夠循環處理大量數據,而循環的基礎就是「數學歸納法」。【區分討論與計數原理】
在「區分討論」複數條件、數據時,程式設計師得注意絕對不能有所遺漏。此時,加法原理、乘法原理、排列組合等「計數原理」可帶來幫助。這是程式設計師應該不斷磨練的數學工具。
此外,本書也可學習遞迴、指數、對數、餘數等基本且重要的思維。
人類與電腦的共同戰線
我們編寫程式是為了解決單靠人類無法解決的問題,程式設計師理解問題、編寫程式後,由電腦執行該程式來解決問題。
人類不擅長反覆執行,一下子就會覺得厭煩並犯下錯誤,但卻擅長解決問題;電腦則擅長反覆執行,但無法自行解決問題。
換言之,解決問題需要結合人類和電腦的力量。
遭遇困難問題時,單靠人類或電腦並無法解決,但結合兩者之力就能迎刃而解。本書的目的之一就是描述人機合作的情況。
然而,編寫程式有其困難性,即便人機合作仍有無法解決的問題。本書中,我們也會探究人類和電腦的極限。
期望各位讀完本書後,能夠對人類使用程式與電腦協作有更深刻的理解。
0 的功用:確保場所
在本小節,我們來討論 0 的功用。例如,十進制 2503 的 0 發揮了什麼樣的功用?2503 的 0表示「沒有」十位,但就算「沒有」十位,2503 也必須寫出 0 。因為若省略 0 寫成 253 ,會變成其他的數。
在進位計數法,數位具有重要的意義,所以即便「沒有」十位的數,該處也必須放置數字。此時就輪到 0 登場了。0 的功用是確保場所,就像是支撐著上面的數位不讓它掉下來。
多虧「存在」用來表示「沒有」的 0 ,才能夠正確表達數目的意義。在進位計數法中,0 可說是不可欠缺的存在。
日常生活中的 0
在日常生活中,有時也可以看到用 0 表示「什麼都沒有」。
沒有安排計畫的行程
我們會使用行事曆管理預定行程,在上頭填寫「文書工作」「出差」「研討會」等預定行程。那麼,相當於「0」的預定行程是什麼樣的行程呢?
例如,我們可以設定一個假想行程「空計畫」來表示「沒有安排計畫的行程」。在電腦的行事曆上檢索「空計畫」,就能夠找出有空閒的日子。如同尋找預定的行程,我們可以找到「沒有計畫」的行程。
另外,「不安排計畫的行程」也可想成是 0。事先在行事曆上填入「不安排計畫的行程」,就能預防生活全被工作埋沒。這跟進位計數法使用 0 來確保場所有幾分類似。
沒有藥效的藥物
假設某病人必須規律服用某種膠囊藥物,每四天需停藥一天。換言之,需要反覆「服藥三天後休息一天」的循環。想要病人記住循環地持續服藥,是相當困難的事情。
因此,有人想出如下的點子:讓病人每天都服用膠囊藥物,但 4 粒膠囊裡面有 1 粒是「沒有任何效果」的假膠囊。若是能夠準備標有日期的藥盒,裡頭放入「今日藥物」就更好了。
如此一來,病人就不需要判斷「今天是不是服藥的日子?」多虧「沒有」藥效的藥物「存在」,才能產生「每天服用1粒膠囊」的簡化規則。
這個假膠囊,發揮了如同進位計數法中「0」的功用。
數學思維的例子
「數學思維」感覺過於抽象,以下就稍微舉例說明!
【條件分歧與邏輯】
在設計程式時,我們會根據條件來「分歧」處理,C、Java 等多數程式語言是使用if 敘述。若滿足條件,執行這邊的處理;若不滿足條件,執行那邊的處理,像這樣控制處理的流程。此時,我們是使用數學領域中的「邏輯」來控管程式,因此在程式設計上,必須熟習「且」「或」「非……」「若……則……」等邏輯要素。
【循環與數學歸納法】
為了處理大量資訊,我們會使用程式來執行「循環」。例如,使用for敘述能夠循環處理大量數據,而循環的基礎就是...
作者序
本書是寫給程式設計師的數學讀物。
程式設計的基礎是電腦科學,電腦科學的基礎是數學。因此,學好數學有助於鞏固程式設計的基礎,寫出完善的程式。
「但是,我就是不擅長數學。」有些讀者會這麼想吧,尤其「一看見數學式就想跳過」的讀者,應該也不在少數。老實說,如果書中出現數學式,我自己也會想要跳過不讀。
本書會盡可能去除這些「想要跳過不讀的數學式」*,淺談相關的定義、定理及證明。
本書主要是幫助程式設計師加深理解程式設計,期望各位能夠習得有助
於程式設計的「數學思維」。
本書是寫給程式設計師的數學讀物。
程式設計的基礎是電腦科學,電腦科學的基礎是數學。因此,學好數學有助於鞏固程式設計的基礎,寫出完善的程式。
「但是,我就是不擅長數學。」有些讀者會這麼想吧,尤其「一看見數學式就想跳過」的讀者,應該也不在少數。老實說,如果書中出現數學式,我自己也會想要跳過不讀。
本書會盡可能去除這些「想要跳過不讀的數學式」*,淺談相關的定義、定理及證明。
本書主要是幫助程式設計師加深理解程式設計,期望各位能夠習得有助
於程式設計的「數學思維」。
目錄
第1章 0的故事
本章要學習的東西
小學一年級的回憶
十進制
二進制
進位計數法
指數定律
0 發揮的功用
人類的極限與結構的發現
本章學到的東西
第2章 邏輯
本章要學習的東西
為什麼邏輯重要?
乘車票價問題沒有─遺漏且互斥的分割
建構複雜的命題
笛摩根定律
卡諾圖
含有未定義的邏輯
本章學到的東西
第3章 剩餘
本章要學的東西
星期數問題(1)
星期數問題(2)
乘方問題
黑白棋通訊
尋找戀人問題
榻榻米鋪滿問題
一筆畫問題
本章學到的東西
第4章 數學歸納法
本章要學的東西
高斯少年求和
數學歸納法─推倒無數的多米諾骨牌
求奇數和─數學歸納法的例子
黑白棋問題錯誤的數學歸納法
程式與數學歸納法
本章學到的東西
第5章 排列組合
本章要學的東西114
什麼是計數─與整數的對應
種樹計算─不要忘記0
加法原理
乘法原理
置換
排列
組合
練習問題
本章學到的東西
第6章 遞迴
本章要學的東西
河內塔
再回來看階乘
費氏數列
巴斯卡三角形
遞迴圖形
本章學到的東西
第7章 指數爆發
本章要學的東西
什麼是指數爆發?
倍數遊戲─指數爆發產生的困難
二元搜尋─利用指數爆發檢索
對數─掌握指數爆發的工具
加密─以指數爆發保守祕密
如何處理指數爆發?
本章學到的東西
第8章 不可計算的問題
本章要學的東西
反證法
可數的
對角論證法
不可計算的問題
停機判斷問題
本章學到的東西
第9章 程式設計必修的數學課
回顧本書
所謂的解決問題
附錄1 邁向機器學習的第一步
附錄要學的東西
什麼是機器學習?
預測問題與分類問題
感知器
機器學習的「學習」
類神經網路
人類將會被機器取代嗎?
附錄學到的東西
附錄2 讀書指南
課外選讀
電腦科學
第1章 0的故事
本章要學習的東西
小學一年級的回憶
十進制
二進制
進位計數法
指數定律
0 發揮的功用
人類的極限與結構的發現
本章學到的東西
第2章 邏輯
本章要學習的東西
為什麼邏輯重要?
乘車票價問題沒有─遺漏且互斥的分割
建構複雜的命題
笛摩根定律
卡諾圖
含有未定義的邏輯
本章學到的東西
第3章 剩餘
本章要學的東西
星期數問題(1)
星期數問題(2)
乘方問題
黑白棋通訊
尋找戀人問題
榻榻米鋪滿問題
一筆畫問題
本章學到的東西
第4章 數學歸納法
本章要學的東西
高斯少年求和
數學歸納法─...