商品描述
本書是關於計算機編程的科普書,它包含了計算機軟件的發展歷史、原理、數據結構,
以及基本算法等內容,並進一步探討了動態規劃、概率統計和神經網絡等進階知識。
作者通過輕鬆的筆調,由淺入深地對編程的本質進行了直觀、具體的討論。
雖然書中的例子都是用Python編寫的,但是介紹的編程方法和思想卻是通用的。
書中的實例都有對應的完整代碼實現,涉及初等數學、
數據結構、排序與查找、數理統計、動態規劃及神經網絡等多個方面。
這些實例把編程原理講解和程序代碼結合在一起,
從而讓概念更加容易理解。
本書適合學習Python,以及編程的讀者閱讀。
作者簡介
郭屹:中國Java研發工程師鼻祖之一,JDBC Driver、Minis開發者,Norming軟件國際CTO。
曾在Sun Microsystems公司Java研發中心擔任J2EE研發工程師。
目錄大綱
目 錄
前言
第1章 程序、數字與進制1
1.1 概述1
1.2 何謂程序? 1
1.3 計算機只有兩根手指? 3
1.3.1 為什麼偏偏是二進制? 3
1.3.2 計算機與十進制4
1.4 Python怎麼掰手指? 4
1.5 Python語言入門5
第2章 計算機內部探秘8
2.1 計算機本來就叫計算機8
2.2 化計算為加法9
2.2.1 從小學的1+1開始9
2.2.2 計算機的移位操作10
2.2.3 不單單是乘除法實現12
2.3 進制轉換及數據存儲14
2.3.1 進制的轉換14
2.3.2 計算機如何存儲數據? 15
2.3.3 形像一點來看晶體管16
2.3.4 抽像一點來看數據存儲邏輯19
2.3.5 字符的編號20
2.4 從加法到芯片20
2.4.1 萬法歸加法20
2.4.2 自己做個加法器21
2.5 101頁報告改變了世界23
2.5.1 又笨又快的圖靈機23
2.5.2 從101頁報告到極簡計算機25
2.5.3 跟著“極簡”執行代碼26
第3章 編程基礎概念31
3.1 計算機的外包裝31
3.2 計算機的高級語言32
3.3 Goto語句有害33
3.4 說說數據結構34
3.5 面向對象編程36
3.5.1 什麼是面向對象編程? 36
3.5.2 Python的混合編程36
3.6 進程與線程37
3.7 遞推與遞歸38
3.8 關於分治39
3.9 算法及性能分析39
第4章 數學與編程是一家41
4.1 什麼是函數? 41
4.1.1 先算一個階乘41
4.1.2 往前走一步—求平方根43
4.1.3 再往前走一步—求階乘的平方根46
4.1.4 Python常見的庫49
4.2 面向對象編程,再來求一求素數50
4.2.1 捋清思路50
4.2.2 過程執行52
4.2.3 驗證哥德巴赫猜想53
4.2.4 驗證與證明55
4.3 遞歸,還記得斐波那契數列嗎? 55
4.3.1 斐波那契數列55
4.3.2 生活中的斐波那契數列56
4.3.3 用遞歸重寫階乘57
4.4 深入遞歸,漢諾塔問題58
4.4.1 漢諾塔傳說58
4.4.2 塔也是遞歸,遞歸也是樹59
4.5 Python解方程61
4.5.1 二次方程61
4.5.2 高次方程63
4.5.3 Python解同餘方程64
4.6 Python用劉徽割圓術求面積66
4.6.1 劉徽割圓術求面積66
4.6.2 進入遞推,交給Python68
4.7 跟著Ada計算伯努利數(向Ada致敬)70
4.7.1 分析計算伯努利數70
4.7.2 為什麼要向Ada致以敬意? 72
第5章 字符處理73
5.1 先來談談字符編碼73
5.1.1 首先是Unicode73
5.1.2 有了Unicode還不夠74
5.2 Python如何操作字符串75
5.2.1 豐富的字符串操作75
5.2.2 開始造個輪子76
5.3 凱撒密碼(Caesar cipher)78
5.4 字符串查找(KMP算法)80
5.4.1 從最笨的方法開始80
5.4.2 聰明一點的方法83
5.5 Python如何操作文件88
5.5.1 操作文件的方式88
5.5.2 簡單地演練一下88
5.6 JSON是誰90
5.6.1 JSON對象90
5.6.2 解析JSON91
5.6.3 解析複雜JSON93
5.7 關於正則表達式95
5.7.1 正則表達式的功用95
5.7.2 正則解釋器97
5.7.3 正則表達式的應用99
第6章 數據結構103
6.1 Python的序列103
6.1.1 ArrayList和LinkedList操作103
6.1.2 首先是ArrayList104
6.1.3 接下來是LinkedList107
6.2 關於棧—先進後出112
6.3 括號如何匹配114
6.4 數學表達式解析115
6.4.1 計算機讀取數學表達式115
6.4.2 獲取操作數與操作符序列116
6.4.3 開始計算119
6.5 關於HashMap121
6.5.1 Python中的字典操作121
6.5.2 手動做HashMap122
6.5.3 增刪改查123
6.5.4 HashMap遍歷127
6.5.5 成果驗收128
6.6 樹之遍歷130
6.6.1 先構建一棵二叉樹130
6.6.2 再遍歷二叉樹131
6.6.3 換一種方式遍歷133
6.7 樹之構建和查找134
6.7.1 還是先構建樹134
6.7.2 然後查找特定元素136
6.7.3 讓樹更加泛用137
6.8 平衡樹(AVL算法)138
6.8.1 平衡二叉樹138
6.8.2 平衡二叉樹增加節點140
6.8.3 不平衡就旋轉142
6.9 圖的表示146
6.10 拓撲排序148
6.11 最短路徑(Dijkstra算法)151
6.12 關鍵路徑CP154
第7章 查找與排序160
7.1 查字典—冒泡排序160
7.2 每次吃最甜的葡萄—選擇排序161
7.3 抓牌看牌—插入排序162
7.3.1 先來描述一下場景162
7.3.2 進入Python162
7.4 向左向右看齊—快速排序164
7.4.1 先來分而治之164
7.4.2 開始編寫快速排序程序166
7.5 先分叉再排序—堆排序167
7.5.1 先理解堆排序思路167
7.5.2 Python的時間169
7.6 不會淘汰的季后賽—歸併排序170
7.7 以上排序的比較172
7.8 插入排序2.0—希爾排序173
7.9 桶排序—計數排序174
7.10 二分查找(試著做一個字典)176
第8章 動態規劃182
8.1 遊戲幣貪心算法—DP導入182
8.1.1 遊戲幣的動態規劃182
8.1.2 隨機數字三角的動態規劃184
8.2 序列的公約數—LCS186
8.3 基因序列比對(Levenshtein算法)187
8.4 背包問題192
8.4.1 背包問題解析192
8.4.2 開始變成程序194
第9章 數理統計與人工智能196
9.1 人均收入統計196
9.1.1 先從數據出發196
9.1.2 進入程序世界198
9.1.3 來看點經濟學(基尼係數)199
9.2 用貝葉斯公式智能診斷201
9.2.1 先來談談概率201
9.2.2 “智能醫生”的訓練202
9.3 預測廣告效果的線性回歸203
9.3.1 線性回歸203
9.3.2 向量204
9.3.3 編寫線性回性程序205
9.4 馬爾可夫模型208
9.4.1 什麼是馬爾可夫模型208
9.4.2 開始解決一些問題吧208
9.5 最後聊聊人工神經網絡210
9.5.1 可以開始做點仿生了—一個簡單的神經元211
9.5.2 “神經元”如何學習214