書籍仍然是學習編程和提高開發者技能的最好途徑,沒有之一。
但最大的問題是:程序員如何根據自己的興趣需求去選一本適合自己的書呢?這也是今天我們要和大家聊的一個話題。
如何快速評估一本書籍的好壞?
快速評估一本編程手冊適不適合你的最佳位置是在目錄(TOC)中。如果你想要學習的具體主題內容沒有出現在TOC的任何位置,那麼你基本可以認定這本書對你的幫助不大,你想要的知識點在這本書上基本是粗略帶過甚至沒有提及。
接下來,瀏覽幾個章節(如果在網上挑選,一般有試讀章節),看看書中的內容描述。有些作者僅用一個或兩個方法來講解一個主題,最好還是要提供三種或四種學習方法:包括實踐練習,源代碼,內容詳解和編碼過程。
閱讀部分知識點的介紹。長而沉悶的介紹可能表明這本書包含很多你可能並不需要的內容。另一方面,介紹的很簡短,你也可能會發現這些解釋不夠全面,並且會讓你讀起來有些摸不著頭腦。
信息檢索的重要性,它能使幫助你在浩瀚的書海中迅速全面地查找到所需信息。查找一些你感興趣的關鍵詞,如果它們沒有在索引中出現,那麼你基本就不用指望這本書會出現這些關鍵知識點,一個好的索引不僅包含你需要的關鍵字,而且它還會以一種特定的方式組織這些關鍵詞,使你在查閱你的關鍵詞時還能看到其他相關信息。
最後,請把重點放在作者身上,判斷一個作者對這門學科的專業程度,一個專業的作者撰寫的書是經過精心研究的,有組織的,內容充實的。但事實情況並不總是如此,很多書是由三個或者三個以上作者合作編寫的,這類書籍有時會缺乏重點,讓你迷惑於多種寫作風格中,甚至會包含相互矛盾的信息。
如何避免入坑
根據標題或者封面直接購買書籍的方式是最糟糕的 ,但仍然有大量的程序員是以這種方式購書的,事實上,封面能給你的唯一信息就是對作者片面的簡介,以及這本書內容最簡單的概括。
書評確實可以給你這本書是否值得讀的建議,不過,請記住一點,任何評價都是帶有主觀情緒在裡面,甚至有些評論只是讀者從別的地方複製粘貼過來的,因此要注意辨別。
根據特定標題來選擇編程書籍也很重要,而不僅僅是基於出版商或系列圖書的聲譽。每一個出版商都可能出版劣質書籍,因此也不能單靠出版商選擇書籍。
最後,要小心暢銷書。暢銷書籍往往會排在列表前面幾位,無論是在實體書店還是在線上。它都可能可能會列在暢銷書列表中,因為它們寫得非常好。但有時書籍會暢銷是因為出版商投入了大量營銷資金。因此,單靠暢銷書列表並不總是確定這本書是否真的是你需要的理想資源。你還需要結合其他因素綜合判斷。
以算法圖書為例
下面,我們以算法圖書為例,在京東搜索 {算法},並且按照綜合排序,得出的搜索結果如下:
排除第一、第二的《未來簡史》,接下來的幾本算法書,都是在業內的口碑良好、備受關注的圖書,至於選擇哪一本,你還應該更進一步比較。
比如取《算法導論》而言,在上圖銷量中的豆瓣評分是最高的,達到9.3分,這說明大部分讀者對於它的評價還是很高的,當然也不排除個別覺得本書不好的
接下來再看本書的內容結構安排:
目錄(滑動查看)
譯者序
前言
第一部分 基礎知識
第1章 算法在計算中的作用 3
1.1 算法 3
1.2 作為一種技術的算法 6
思考題 8
本章註記 8
第2章 算法基礎 9
2.1 插入排序 9
2.2 分析算法 13
2.3 設計算法 16
2.3.1 分治法 16
2.3.2 分析分治算法 20
思考題 22
本章註記 24
第3章 函數的增長 25
3.1 漸近記號 25
3.2 標準記號與常用函數 30
思考題 35
本章註記 36
第4章 分治策略 37
4.1 最大子數組問題 38
4.2 矩陣乘法的Strassen算法 43
4.3 用代入法求解遞歸式 47
4.4 用遞歸樹方法求解遞歸式 50
4.5 用主方法求解遞歸式 53
4.6 證明主定理 55
4.6.1 對b的冪證明主定理 56
4.6.2 向下取整和向上取整 58
思考題 60
本章註記 62
第5章 概率分析和隨機算法 65
5.1 僱用問題 65
5.2 指示器隨機變量 67
5.3 隨機算法 69
5.4 概率分析和指示器隨機變量的進一步使用 73
5.4.1 生日悖論 73
5.4.2 球與箱子 75
5.4.3 特徵序列 76
5.4.4 在線僱用問題 78
思考題 79
本章註記 80
第二部分 排序和順序統計量
第6章 堆排序 84
6.1 堆 84
6.2 維護堆的性質 85
6.3 建堆 87
6.4 堆排序算法 89
6.5 優先隊列 90
思考題 93
本章註記 94
第7章 快速排序 95
7.1 快速排序的描述 95
7.2 快速排序的性能 97
7.3 快速排序的隨機化版本 100
7.4 快速排序分析 101
7.4.1 最壞情況分析 101
7.4.2 期望運行時間 101
思考題 103
本章註記 106
第8章 線性時間排序 107
8.1 排序算法的下界 107
8.2 計數排序 108
8.3 基數排序 110
8.4 桶排序 112
思考題 114
本章註記 118
第9章 中位數和順序統計量 119
9.1 最小值和最大值 119
9.2 期望為線性時間的選擇算法 120
9.3 最壞情況為線性時間的選擇算法 123
思考題 125
本章註記 126
第三部分 數據結構
第10章 基本數據結構 129
10.1 棧和隊列 129
10.2 鏈表 131
10.3 指針和對象的實現 134
10.4 有根樹的表示 137
思考題 139
本章註記 141
第11章 散列表 142
11.1 直接尋址表 142
11.2 散列表 143
11.3 散列函數 147
11.3.1 除法散列法 147
11.3.2 乘法散列法 148
11.3.3 全域散列法 148
11.4 開放尋址法 151
11.5 完全散列 156
思考題 158
本章註記 160
第12章 二叉搜索樹 161
12.1 什麼是二叉搜索樹 161
12.2 查詢二叉搜索樹 163
12.3 插入和刪除 165
12.4 隨機構建二叉搜索樹 169
思考題 171
本章註記 173
第13章 紅黑樹 174
13.1 紅黑樹的性質 174
13.2 旋轉 176
13.3 插入 178
13.4 刪除 183
思考題 187
本章註記 191
第14章 數據結構的擴張 193
14.1 動態順序統計 193
14.2 如何擴張數據結構 196
14.3 區間樹 198
思考題 202
本章註記 202
第四部分 高級設計和分析技術
第15章 動態規劃 204
15.1 鋼條切割 204
15.2 矩陣鏈乘法 210
15.3 動態規劃原理 215
15.4 最長公共子序列 222
15.5 最優二叉搜索樹 226
思考題 231
本章註記 236
第16章 貪心算法 237
16.1 活動選擇問題 237
16.2 貪心算法原理 242
16.3 赫夫曼編碼 245
16.4 擬陣和貪心算法 250
16.5 用擬陣求解任務調度問題 253
思考題 255
本章註記 257
第17章 攤還分析 258
17.1 聚合分析 258
17.2 核算法 261
17.3 勢能法 262
17.4 動態表 264
17.4.1 表擴張 265
17.4.2 表擴張和收縮 267
思考題 270
本章註記 273
第五部分 高級數據結構
第18章 B樹 277
18.1 B樹的定義 279
18.2 B樹上的基本操作 281
18.3 從B樹中刪除關鍵字 286
思考題 288
本章註記 289
第19章 斐波那契堆 290
19.1 斐波那契堆結構 291
19.2 可合併堆操作 292
19.3 關鍵字減值和刪除一個結點 298
19.4 最大度數的界 300
思考題 302
本章註記 305
第20章 van Emde Boas樹 306
20.1 基本方法 306
20.2 遞歸結構 308
20.2.1 原型van Emde Boas結構 310
20.2.2 原型van Emde Boas結構上的操作 311
20.3 van Emde Boas樹及其操作 314
20.3.1 van Emde Boas樹 315
20.3.2 van Emde Boas樹的操作 317
思考題 322
本章註記 323
第21章 用於不相交集合的數據結構 324
21.1 不相交集合的操作 324
21.2 不相交集合的鏈表表示 326
21.3 不相交集合森林 328
21.4 帶路徑壓縮的按秩合併的分析 331
思考題 336
本章註記 337
第六部分 圖算法
第22章 基本的圖算法 341
22.1 圖的表示 341
22.2 廣度優先搜索 343
22.3 深度優先搜索 349
22.4 拓撲排序 355
22.5 強連通分量 357
思考題 360
本章註記 361
第23章 最小生成樹 362
23.1 最小生成樹的形成 362
23.2 Kruskal算法和Prim算法 366
思考題 370
本章註記 373
第24章 單源最短路徑 374
24.1 Bellman-Ford算法 379
24.2 有向無環圖中的單源最短路徑問題 381
24.3 Dijkstra算法 383
24.4 差分約束和最短路徑 387
24.5 最短路徑性質的證明 391
思考題 395
本章註記 398
第25章 所有結點對的最短路徑問題 399
25.1 最短路徑和矩陣乘法 400
25.2 Floyd-Warshall算法 404
25.3 用於稀疏圖的Johnson算法 409
思考題 412
本章註記 412
第26章 最大流 414
26.1 流網絡 414
26.2 Ford\Fulkerson方法 418
26.3 最大二分匹配 428
26.4 推送重貼標籤算法 431
26.5 前置重貼標籤算法 438
思考題 446
本章註記 449
第七部分 算法問題選編
第27章 多線程算法 453
27.1 動態多線程基礎 454
27.2 多線程矩陣乘法 465
27.3 多線程歸併排序 468
思考題 472
本章註記 476
第28章 矩陣運算 478
28.1 求解線性方程組 478
28.2 矩陣求逆 486
28.3 對稱正定矩陣和最小二乘逼近 489
思考題 493
本章註記 494
第29章 線性規劃 495
29.1 標準型和鬆弛型 499
29.2 將問題表達為線性規劃 504
29.3 單純形算法 507
29.4 對偶性 516
29.5 初始基本可行解 520
思考題 525
本章註記 526
第30章 多項式與快速傅里葉變換 527
30.1 多項式的表示 528
30.2 DFT與FFT 531
30.3 高效FFT實現 536
思考題 539
本章註記 541
第31章 數論算法 543
31.1 基礎數論概念 543
31.2 最大公約數 547
31.3 模運算 550
31.4 求解模線性方程 554
31.5 中國餘數定理 556
31.6 元素的冪 558
31.7 RSA公鑰加密系統 561
31.8 素數的測試 565
31.9 整數的因子分解 571
思考題 574
本章註記 576
第32章 字符串匹配 577
32.1 樸素字符串匹配算法 578
32.2 Rabin\Karp算法 580
32.3 利用有限自動機進行字符串匹配 583
32.4 Knuth-Morris-Pratt算法 588
思考題 594
本章註記 594
第33章 計算幾何學 595
33.1 線段的性質 595
33.2 確定任意一對線段是否相交 599
33.3 尋找凸包 604
33.4 尋找最近點對 610
思考題 613
本章註記 615
第34章 NP完全性 616
34.1 多項式時間 619
34.2 多項式時間的驗證 623
34.3 NP完全性與可歸約性 626
34.4 NP完全性的證明 633
34.5 NP完全問題 638
34.5.1 團問題 638
34.5.2 頂點覆蓋問題 640
34.5.3 哈密頓迴路問題 641
34.5.4 旅行商問題 644
34.5.5 子集和問題 645
思考題 647
本章註記 649
第35章 近似算法 651
35.1 頂點覆蓋問題 652
35.2 旅行商問題 654
35.2.1 滿足三角不等式的旅行商問題 654
35.2.2 一般旅行商問題 656
35.3 集合覆蓋問題 658
35.4 隨機化和線性規劃 661
35.5 子集和問題 663
思考題 667
本章註記 669
第八部分 附錄:數學基礎知識
附錄A 求和 672
A.1 求和公式及其性質 672
A.2 確定求和時間的界 674
思考題 678
附錄註記 678
附錄B 集合等離散數學內容 679
B.1 集合 679
B.2 關係 682
B.3 函數 683
B.4 圖 685
B.5 樹 687
B.5.1 自由樹 688
B.5.2 有根樹和有序樹 689
B.5.3 二叉樹和位置樹 690
思考題 691
附錄註記 692
附錄C 計數與概率 693
C.1 計數 693
C.2 概率 696
C.3 離散隨機變量 700
C.4 幾何分佈與二項分佈 702
C.5 二項分佈的尾部 705
思考題 708
附錄註記 708
附錄D 矩陣 709
D.1 矩陣與矩陣運算 709
D.2 矩陣基本性質 712
思考題 714
附錄註記 715
參考文獻 716
索引 732
通過本書的內容結構,去查找你想要看的內容是否在裡面。
如前面提及的,我們還應該通過作者簡介,去判斷一個作者對這門學科的專業程度,能否很好的講解書中的知識點,下面就是《算法導論》本書的四位作者
Thomas H. Cormen (托馬斯·科爾曼),達特茅斯學院計算機科學系教授、系主任。目前的研究興趣包括:算法工程、並行計算、具有高延遲的加速計算。
Charles E. Leiserson(查爾斯·雷瑟爾森),麻省理工學院計算機科學與電氣工程系教授,Margaret MacVicar Faculty Fellow。他目前主持MIT超級計算技術研究組,並是MIT計算機科學和人工智能實驗室計算理論研究組的成員。
Ronald L. Rivest (羅納德·李維斯特),現任麻省理工學院電子工程和計算機科學系安德魯與厄納·維特爾比(Andrew and Erna Viterbi)教授。他是MIT計算機科學和人工智能實驗室的成員,並領導著其中的信息安全和隱私中心。
Clifford Stein(克利福德·斯坦),哥倫比亞大學計算機科學系和工業工程與運籌學系教授,他還是工業工程與運籌學系的系主任。他的研究興趣包括:算法的設計與分析,組合優化、運籌學、網絡算法、調度、算法工程和生物計算。
此外,你還應該對本書進行一個粗略的試讀,再綜合以上因素,多對比幾本書,相信一定可以找到一本適合自己需求的書籍。
你平常都是怎麼挑選自己的技術書籍的呢,留言分享給大家。
閱讀更多 圈T社區 的文章