本書面向所有對計算機科學感興趣的讀者,以淺顯易懂的語言和簡明扼要的形式介紹計算機科學領(lǐng)域的重要知識點,盡量少涉及學術(shù)概念,著力將抽象理論具體化,復雜問題簡單化,既適合計算機專業(yè)技術(shù)人員查漏補缺基本理論,也適合普通讀者了解計算思維。
計算機科學無處不在,但傳統(tǒng)教材枯燥無趣,致使很多程序員從未深入研究過這一對于實現(xiàn)高效程序設(shè)計至關(guān)重要的學科,也將很多對此話題感興趣的非程序員擋在了門外。
本書以簡明扼要的形式介紹計算機科學知識,淺顯易懂,既適合程序員鞏固編程基礎(chǔ),也適合普通人了解計算機科學和計算思維。
- 梳理了求解問題所需的基本數(shù)學知識,將想法轉(zhuǎn)換為可供計算機執(zhí)行的解決方案
- 介紹了復雜度,借由時間復雜度與空間復雜度分析評估算法性能
- 算法設(shè)計中使用的主要策略
- 數(shù)據(jù)結(jié)構(gòu)與抽象數(shù)據(jù)類型,以及它們?nèi)绾斡绊懽畛R姷臄?shù)據(jù)操作的性能
- 求解各類問題所用的一些知名算法與技術(shù)
- 理解不同類型的數(shù)據(jù)庫管理系統(tǒng)及其特性
- 基本的計算機工作原理
- 程序設(shè)計的本質(zhì)
【作者簡介】
Wladston Ferreira Filho 程序員,現(xiàn)任職于Code Energy。極簡主義者。熱衷于學習各種編程語言。
【譯者簡介】
蔣楠 畢業(yè)于電子科技大學、維多利亞大學。多年來致力于Web開發(fā)與軟件架構(gòu)設(shè)計,對算法、數(shù)據(jù)密集型應(yīng)用、分布式數(shù)據(jù)庫系統(tǒng)興趣濃厚。非zi深程序員,嚴肅馬拉松跑者。
第 1章 預備知識 1
1.1 想法 1
1.1.1 流程圖 2
1.1.2 偽代碼 3
1.1.3 數(shù)學模型 4
1.2 邏輯 5
1.2.1 運算符 6
1.2.2 布爾代數(shù) 8
1.2.3 真值表 9
1.2.4 邏輯在計算中的應(yīng)用 12
1.3 計數(shù) 13
1.3.1 乘法 13
1.3.2 排列 14
1.3.3 具有相同項的排列 15
1.3.4 組合 16
1.3.5 求和 17
1.4 概率 19
1.4.1 對結(jié)果計數(shù) 19
1.4.2 獨立事件 20
1.4.3 互斥事件 20
1.4.4 對立事件 21
1.4.5 賭徒謬誤 21
1.4.6 高級概率 21
1.5 小結(jié) 22
第 2章 復雜度 23
2.1 時間計算 25
2.2 大O 符號 28
2.3 指數(shù) 29
2.4 內(nèi)存計算 30
2.5 小結(jié) 31
第3章 策略 33
3.1 迭代 33
3.2 遞歸 36
3.3 蠻力法 38
3.4 回溯法 40
3.5 啟發(fā)法 43
3.5.1 貪心法 43
3.5.2 利用貪心法求解電網(wǎng)問題 45
3.6 分治法 46
3.6.1 利用分治法求解排序問題 46
3.6.2 利用分治法求解最佳交易問題 49
3.6.3 利用分治法求解背包問題 50
3.7 動態(tài)規(guī)劃 51
3.7.1 利用記憶化求解斐波那契數(shù) 52
3.7.2 利用記憶化求解背包問題 52
3.7.3 利用自底向上法求解最佳交易問題 53
3.8 分支定界法 54
3.8.1 上界與下界 55
3.8.2 背包問題中的上界與下界 56
3.9 小結(jié) 58
第4章 數(shù)據(jù) 59
4.1 抽象數(shù)據(jù)類型 60
4.2 常見抽象 62
4.2.1 基本數(shù)據(jù)類型 62
4.2.2 !62
4.2.3 隊列 63
4.2.4 優(yōu)先隊列 63
4.2.5 列表 64
4.2.6 排序列表 64
4.2.7 映射 65
4.2.8 集合 65
4.3 數(shù)據(jù)結(jié)構(gòu) 65
4.3.1 數(shù)組 66
4.3.2 鏈表 67
4.3.3 雙向鏈表 68
4.3.4 數(shù)組與鏈表的比較 68
4.3.5 樹 69
4.3.6 二叉查找樹 70
4.3.7 二叉堆 73
4.3.8 圖 74
4.3.9 散列表 74
4.4 小結(jié) 75
第5章 算法 77
5.1 排序 77
5.2 搜索 79
5.3 圖 80
5.3.1 圖的搜索 80
5.3.2 圖著色 83
5.3.3 尋路 83
5.3.4 PageRank 86
5.4 運籌學 86
5.4.1 線性最優(yōu)化問題 87
5.4.2 網(wǎng)絡(luò)流問題 88
5.5 小結(jié) 89
第6章 數(shù)據(jù)庫 91
6.1 關(guān)系數(shù)據(jù)庫 92
6.1.1 關(guān)系 92
6.1.2 模式遷移 95
6.1.3 SQL 95
6.1.4 索引 97
6.1.5 事務(wù) 99
6.2 非關(guān)系數(shù)據(jù)庫 99
6.2.1 文檔存儲 100
6.2.2 鍵值對存儲 101
6.2.3 圖數(shù)據(jù)庫 102
6.2.4 大數(shù)據(jù) 103
6.2.5 SQL 與NoSQL 的比較 103
6.3 分布式數(shù)據(jù)庫 104
6.3.1 單主機復制 104
6.3.2 多主機復制 105
6.3.3 分片 105
6.3.4 數(shù)據(jù)一致性 107
6.4 地理數(shù)據(jù)庫 107
6.5 序列化格式 108
6.6 小結(jié) 109
第7章 計算機 111
7.1 體系結(jié)構(gòu) 111
7.1.1 存儲器 112
7.1.2 CPU 114
7.2 編譯器 118
7.2.1 操作系統(tǒng) 121
7.2.2 編譯優(yōu)化 121
7.2.3 腳本語言 122
7.2.4 反匯編與逆向工程 123
7.2.5 開源軟件 124
7.3 存儲器層次結(jié)構(gòu) 125
7.3.1 處理器與存儲器之間的鴻溝 125
7.3.2 時間局部性與空間局部性 126
7.3.3 一級緩存 127
7.3.4 二級緩存 127
7.3.5 第 一級存儲器與第二級存儲器 128
7.3.6 外部存儲器與第三級存儲器 130
7.3.7 存儲技術(shù)的發(fā)展趨勢 130
7.4 小結(jié) 131
第8章 程序設(shè)計 133
8.1 語言學 133
8.1.1 值 134
8.1.2 表達式 134
8.1.3 語句 135
8.2 變量 136
8.2.1 變量類型 136
8.2.2 變量作用域 137
8.3 范式 138
8.3.1 命令式編程 138
8.3.2 聲明式編程 140
8.3.3 邏輯編程 144
8.4 小結(jié) 145
附錄 147
結(jié)語 151
后記 152