
2018、2019、2020連續三年國際資訊奧林匹亞競賽(IOI)金牌得主
日本天才年輕程式設計師米田優峻
為所有程式設計者而寫的演算法×數學學習全指南
從入門者、進階程式設計師到競賽選手都該具備
一口氣學會「必學經典演算法」+「支撐演算法的必要數學知識」
獲得能真正徹底活用演算法的扎實程式設計力!
「要理解程式設計中演算法與基礎數學之間的密切關係,這本書應該是最適合的了。」
──日本國立資訊學研究所副所長 河原林健一 專業推薦
|要真正理解、活用演算法,就得同步從數學下手——
|第一本同時講解「演算法×數學×競賽題型」的程式必備基礎學習書,讓你事半功倍,一步到位!
現代社會中,從電腦、智慧型手機,再到最前端的AI人工智慧等,無一沒有程式語言的參與。
而在電腦強大的功能與計算能力背後,為了以最有效率的方式運算、解決問題,
「演算法」扮演了關鍵角色,讓我們得以用更少的計算資源來解決各種問題。
因此不論資歷深淺,演算法是所有程式設計者必得萬分熟悉的工具與知識。
而要掌握演算法,背後的數學知識更是關鍵,但坊間的演算法學習資源時常忽略了學習者對於相關數學的掌握。
觀察到此點的本書作者米田優峻,因而撰寫了本書,從演算法和數學同步下手,讓我們能夠真正掌握演算法的精髓。
出生於2002年、現就讀東京大學四年級的米田優峻,在中學一年級時迷上程式設計,
於2018、2019、2020連續三年奪得國際資訊奧林匹亞競賽(IOI)金牌,創下驚人紀錄。
2023年,他再度於國際大學生程式設計競賽(ICPC)獲得全球第九名佳績。
透過本書,他將深入淺出為讀者介紹各種經典演算法,並同時介紹必要的數學知識,幫助讀者扎實理解演算法的原理與提升應用能力。
本書共有三大特色:
1. 使用簡單易懂的圖解和方法,讓初學者也能輕鬆掌握。
2. 提供了200道例題和演練題,幫助讀者鞏固所學知識。
3. 從中學到大學程度的數學知識,僅選取與演算法相關的重要部分進行講解。
不論你是剛接觸演算法學習的程式設計入門者,或者希望在已有的數學與演算法知識基礎上更深入理解,抑或者希望為程式設計競賽做準備,
本書提供具體實用的知識和技巧,為你帶來莫大幫助,在閱讀過程中帶給你無窮樂趣。
重要網址統整
購書前須知
序言
第1章 演算法與數學的密切關聯
1.1 演算法是什麼?
1.2 為什麼演算法需要數學?
1.3 關於本書的結構與學習內容
1.4 本書探討的演算法
1.5 本書探討的數學知識及數學思考
第2章 用於演算法的數學基本知識
2.1 數的分類、文字式、二進制
2.2 基本的運算及符號
2.3 各式各樣的函數
2.4 估計計算次數~全搜尋和二元搜尋~
2.5 其他基本的數學知識
專欄1 關於競技程式設計
專欄2 組合的全搜尋
第2章的統整
第3章 基本的演算法
3.1 質數判定法
3.2 輾轉相除法
3.3 情況數及演算法
3.4 機率、期望值及演算法
3.5 蒙地卡羅法~統計的思考方法~
3.6 排序與遞迴的思考方法
3.7 動態規劃法~遞迴式的利用~
專欄3 陣列的二元搜尋
第3章的統整
第4章 進階的演算法
4.1 用電腦解決圖形問題~計算幾何學~
4.2 階差及累積和
4.3 牛頓法~試著進行數值計算吧~
4.4 埃拉托斯特尼篩法
4.5 使用圖形的演算法
4.6 高效的餘數計算
4.7 矩陣乘方~費波那契數列的快速計算~
專欄4 三角函數
專欄5 梯度下降法
第4章的統整
第5章 用以解決問題的數學思考
5.1 為什麼數學思考很重要?
5.2 考慮規律性
5.3 著眼於奇偶
5.4 熟練處理集合
5.5 考慮極限
5.6 分解成小問題
5.7 考慮相加的次數
5.8 考慮上界
5.9 只考慮下一步~貪婪法~
5.10 其他的數學思考
專欄6 A*演算法
第5章的統整
最終確認問題
結語
致謝
推薦書籍
參考文獻
作者簡介
重要網址統整
購書前須知
序言
第1章 演算法與數學的密切關聯
1.1 演算法是什麼?
1.2 為什麼演算法需要數學?
1.3 關於本書的結構與學習內容
1.4 本書探討的演算法
1.5 本書探討的數學知識及數學思考
第2章 用於演算法的數學基本知識
2.1 數的分類、文字式、二進制
2.2 基本的運算及符號
2.3 各式各樣的函數
2.4 估計計算次數~全搜尋和二元搜尋~
2.5 其他基本的數學知識
專欄1 關於競技程式設計
專欄2 組合的全搜尋
第2章的統整
第3章 基本的演算法
3.1 質數判定法
3.2 輾轉相除法
3.3 情況數及演算法
3.4 機率、期望值及演算法
3.5 蒙地卡羅法~統計的思考方法~
3.6 排序與遞迴的思考方法
3.7 動態規劃法~遞迴式的利用~
專欄3 陣列的二元搜尋
第3章的統整
第4章 進階的演算法
4.1 用電腦解決圖形問題~計算幾何學~
4.2 階差及累積和
4.3 牛頓法~試著進行數值計算吧~
4.4 埃拉托斯特尼篩法
4.5 使用圖形的演算法
4.6 高效的餘數計算
4.7 矩陣乘方~費波那契數列的快速計算~
專欄4 三角函數
專欄5 梯度下降法
第4章的統整
第5章 用以解決問題的數學思考
5.1 為什麼數學思考很重要?
5.2 考慮規律性
5.3 著眼於奇偶
5.4 熟練處理集合
5.5 考慮極限
5.6 分解成小問題
5.7 考慮相加的次數
5.8 考慮上界
5.9 只考慮下一步~貪婪法~
5.10 其他的數學思考
專欄6 A*演算法
第5章的統整
最終確認問題
結語
致謝
推薦書籍
參考文獻
作者簡介
重要網址統整
購書前須知
序言
第1章 演算法與數學的密切關聯
1.1 演算法是什麼?
1.2 為什麼演算法需要數學?
1.3 關於本書的結構與學習內容
1.4 本書探討的演算法
1.5 本書探討的數學知識及數學思考
第2章 用於演算法的數學基本知識
2.1 數的分類、文字式、二進制
2.2 基本的運算及符號
2.3 各式各樣的函數
2.4 估計計算次數~全搜尋和二元搜尋~
2.5 其他基本的數學知識
專欄1 關於競技程式設計
專欄2 組合的全搜尋
第2章的統整
第3章 基本的演算法
3.1 質數判定法
3.2 輾轉相除法
3.3 情況數及演算法
3.4 機率、期望值及演算法
3.5 蒙地卡羅法~統計的思考方法~
3.6 排序與遞迴的思考方法
3.7 動態規劃法~遞迴式的利用~
專欄3 陣列的二元搜尋
第3章的統整
第4章 進階的演算法
4.1 用電腦解決圖形問題~計算幾何學~
4.2 階差及累積和
4.3 牛頓法~試著進行數值計算吧~
4.4 埃拉托斯特尼篩法
4.5 使用圖形的演算法
4.6 高效的餘數計算
4.7 矩陣乘方~費波那契數列的快速計算~
專欄4 三角函數
專欄5 梯度下降法
第4章的統整
第5章 用以解決問題的數學思考
5.1 為什麼數學思考很重要?
5.2 考慮規律性
5.3 著眼於奇偶
5.4 熟練處理集合
5.5 考慮極限
5.6 分解成小問題
5.7 考慮相加的次數
5.8 考慮上界
5.9 只考慮下一步~貪婪法~
5.10 其他的數學思考
專欄6 A*演算法
第5章的統整
最終確認問題
結語
致謝
推薦書籍
參考文獻
作者簡介
米田優峻
2002 年生。2021 年畢業於筑波大學附屬駒場高中,現就讀東京大學。
他以「E869120」之名活躍於競技程式設計領域,也在日本最大的競技程式設計比賽網站「AtCoder」上獲得了最高等級的紅色稱號。至2020 年為止於國際資訊奧林匹克(IOI)中獲得三次金牌。與演算法研究相關的獲獎紀錄還包括日本學生科學獎、數學自由研究比賽(MATHコン)等。
此外,他也致力於推廣演算法和競技程式設計的活動,如在Qiita 撰寫〈紅階碼者親授,提升競程的指南〉等文章,以及有數千名參加者規模、在AtCoder 進行每天投稿一個新問題的企劃「競技程式設計典型90 題」等。