本書面向所有對計(jì)算機(jī)科學(xué)感興趣的讀者,以淺顯易懂的語言和簡明扼要的形式介紹計(jì)算機(jī)科學(xué)領(lǐng)域的重要知識(shí)點(diǎn),盡量少涉及學(xué)術(shù)概念,著力將抽象理論具體化,復(fù)雜問題簡單化,既適合計(jì)算機(jī)專業(yè)技術(shù)人員查漏補(bǔ)缺基本理論,也適合普通讀者了解計(jì)算思維。
計(jì)算機(jī)科學(xué)無處不在,但傳統(tǒng)教材枯燥無趣,致使很多程序員從未深入研究過這一對于實(shí)現(xiàn)高效程序設(shè)計(jì)至關(guān)重要的學(xué)科,也將很多對此話題感興趣的非程序員擋在了門外。
本書以簡明扼要的形式介紹計(jì)算機(jī)科學(xué)知識(shí),淺顯易懂,既適合程序員鞏固編程基礎(chǔ),也適合普通人了解計(jì)算機(jī)科學(xué)和計(jì)算思維。
- 梳理了求解問題所需的基本數(shù)學(xué)知識(shí),將想法轉(zhuǎn)換為可供計(jì)算機(jī)執(zhí)行的解決方案
- 介紹了復(fù)雜度,借由時(shí)間復(fù)雜度與空間復(fù)雜度分析評估算法性能
- 算法設(shè)計(jì)中使用的主要策略
- 數(shù)據(jù)結(jié)構(gòu)與抽象數(shù)據(jù)類型,以及它們?nèi)绾斡绊懽畛R姷臄?shù)據(jù)操作的性能
- 求解各類問題所用的一些知名算法與技術(shù)
- 理解不同類型的數(shù)據(jù)庫管理系統(tǒng)及其特性
- 基本的計(jì)算機(jī)工作原理
- 程序設(shè)計(jì)的本質(zhì)
【作者簡介】
Wladston Ferreira Filho 程序員,現(xiàn)任職于Code Energy。極簡主義者。熱衷于學(xué)習(xí)各種編程語言。
【譯者簡介】
蔣楠 畢業(yè)于電子科技大學(xué)、維多利亞大學(xué)。多年來致力于Web開發(fā)與軟件架構(gòu)設(shè)計(jì),對算法、數(shù)據(jù)密集型應(yīng)用、分布式數(shù)據(jù)庫系統(tǒng)興趣濃厚。非zi深程序員,嚴(yán)肅馬拉松跑者。
第 1章 預(yù)備知識(shí) 1
1.1 想法 1
1.1.1 流程圖 2
1.1.2 偽代碼 3
1.1.3 數(shù)學(xué)模型 4
1.2 邏輯 5
1.2.1 運(yùn)算符 6
1.2.2 布爾代數(shù) 8
1.2.3 真值表 9
1.2.4 邏輯在計(jì)算中的應(yīng)用 12
1.3 計(jì)數(shù) 13
1.3.1 乘法 13
1.3.2 排列 14
1.3.3 具有相同項(xiàng)的排列 15
1.3.4 組合 16
1.3.5 求和 17
1.4 概率 19
1.4.1 對結(jié)果計(jì)數(shù) 19
1.4.2 獨(dú)立事件 20
1.4.3 互斥事件 20
1.4.4 對立事件 21
1.4.5 賭徒謬誤 21
1.4.6 高級(jí)概率 21
1.5 小結(jié) 22
第 2章 復(fù)雜度 23
2.1 時(shí)間計(jì)算 25
2.2 大O 符號(hào) 28
2.3 指數(shù) 29
2.4 內(nèi)存計(jì)算 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 動(dòng)態(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 隊(duì)列 63
4.2.4 優(yōu)先隊(duì)列 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 運(yùn)籌學(xué) 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 文檔存儲(chǔ) 100
6.2.2 鍵值對存儲(chǔ) 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 單主機(jī)復(fù)制 104
6.3.2 多主機(jī)復(fù)制 105
6.3.3 分片 105
6.3.4 數(shù)據(jù)一致性 107
6.4 地理數(shù)據(jù)庫 107
6.5 序列化格式 108
6.6 小結(jié) 109
第7章 計(jì)算機(jī) 111
7.1 體系結(jié)構(gòu) 111
7.1.1 存儲(chǔ)器 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 存儲(chǔ)器層次結(jié)構(gòu) 125
7.3.1 處理器與存儲(chǔ)器之間的鴻溝 125
7.3.2 時(shí)間局部性與空間局部性 126
7.3.3 一級(jí)緩存 127
7.3.4 二級(jí)緩存 127
7.3.5 第 一級(jí)存儲(chǔ)器與第二級(jí)存儲(chǔ)器 128
7.3.6 外部存儲(chǔ)器與第三級(jí)存儲(chǔ)器 130
7.3.7 存儲(chǔ)技術(shù)的發(fā)展趨勢 130
7.4 小結(jié) 131
第8章 程序設(shè)計(jì) 133
8.1 語言學(xué) 133
8.1.1 值 134
8.1.2 表達(dá)式 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