本書分為準備篇、基礎篇和應用篇三大部分,借助在線評測系統Aizu Online Judge以及大量例題,詳細講解了算法與復雜度、初等和高等排序、搜索、遞歸和分治法、動態(tài)規(guī)劃法、二叉搜索樹、堆、圖、計算幾何學、數論等與程序設計競賽相關的算法和數據結構,既可以作為挑戰(zhàn)程序設計競賽的參考書,也可以用來引導初學者系統學習算法和數據結構的基礎知識。本書適合所有程序設計人員、程序設計競賽愛好者以及高校計算機專業(yè)師生閱讀。
1.暢銷書《挑戰(zhàn)程序設計競賽》第2彈!
2.網羅算法和數據結構的關鍵知識點!
3.系統學習基礎知識——適合初學者的入門書
有效運用在線評測——適合挑戰(zhàn)者的參考書
4.全書練習均可借助在線評測系統(AIZU ONLINE JUDGE)
與競賽相同的自動審查系統,有效檢測Bug和算法效率
大量習題及往年真題,體驗各類題型、總結答題技巧
與世界各地選手相互切磋、共同成長
5.入門、挑戰(zhàn)、進階,享受收集算法的樂趣!
渡部有。ㄗ髡撸
出生于1979年,計算機理工學博士。會津大學計算機理工學部信息系統學部門副教授。專業(yè)領域為可視化編程語言。AIZU ONLINE JUDGE開發(fā)者。
Ozy(審校)
本名岡田佑一,出生于日本大阪的短碼高手。他花費相當長的時間提升短碼編程技術,進而將其發(fā)展成一種技能,曾獲得程序設計大賽的冠軍。他開辦過程序設計方面的培訓班,目前致力于數學教育和程序設計師的培養(yǎng)工作。曾著有《短碼之美:變成達人的心得技法》(人民郵電出版社)。
秋葉拓哉(審校)
2011年考入東京大學研究生院。以iwi的昵稱活躍在程序設計競賽中。TopCoder評級好成績?yōu)槭澜绲谒模?013年)!短魬(zhàn)程序設計競賽(第2版)》(人民郵電出版社)作者之一。
目錄
第1部分 [準備篇]攻克程序設計競賽的學習方法 1
第1章 有效運用在線評測系統 3
1.1 攻克程序設計競賽的學習方法 3
1.2 什么是在線評測 7
1.3 用戶注冊 9
1.4 瀏覽問題 10
1.5 解答問題 12
1.6 個人頁面 18
1.7 如何運用本書 19
第2部分 [基礎篇]為程序設計競賽做準備的算法與數據結構 21
第2章 算法與復雜度 23
2.1 算法是什么 23
2.2 問題與算法示例 23
2.3 偽代碼 25
2.4 算法的效率 26
2.5 入門問題 28
第3章 初等排序 33
3.1 挑戰(zhàn)問題之前——排序 33
3.2 插入排序法 35
3.3 冒泡排序法 40
3.4 選擇排序法 44
3.5 穩(wěn)定排序 48
3.6 希爾排序法 52
第4章 數據結構 57
4.1 挑戰(zhàn)問題之前——什么是數據結構 57
4.2 棧 59
4.3 隊列 64
4.4 鏈表 70
4.5 標準庫的數據結構 77
4.6 數據結構的應用——計算面積 86
第5章 搜索 89
5.1 挑戰(zhàn)問題之前——搜索 89
5.2 線性搜索 91
5.3 二分搜索 94
5.4 散列法 98
5.5 借助標準庫搜索 102
5.6 搜索的應用——計算最優(yōu)解 106
第6章 遞歸和分治法 109
6.1 挑戰(zhàn)問題之前——遞歸與分治 109
6.2 窮舉搜索 111
6.3 科赫曲線 114
第7章 高等排序 119
7.1 歸并排序 120
7.2 分割 125
7.3 快速排序 129
7.4 計數排序 133
7.5 利用標準庫排序 137
7.6 逆序數 139
7.7 最小成本排序 143
第8章 樹 147
8.1 挑戰(zhàn)問題之前——樹結構 148
8.2 有根樹的表達 150
8.3 二叉樹的表達 154
8.4 樹的遍歷 159
8.5 樹遍歷的應用——樹的重建 163
第9章 二叉搜索樹 167
9.1 挑戰(zhàn)問題之前——二叉搜索樹 168
9.2 二叉搜索樹——插入 169
9.3 二叉搜索樹——搜索 174
9.4 二叉搜索樹——刪除 177
9.5 通過標準庫管理集合 182
第10章 堆 189
10.1 挑戰(zhàn)問題之前——堆 190
10.2 完全二叉樹 191
10.3 最大/最小堆 193
10.4 優(yōu)先級隊列 197
10.5 通過標準庫實現優(yōu)先級隊列 201
第11章 動態(tài)規(guī)劃法 203
11.1 挑戰(zhàn)問題之前——動態(tài)規(guī)劃法的概念 203
11.2 斐波那契數列 204
11.3 最長公共子序列 208
11.4 矩陣鏈乘法 211
第12章 圖 217
12.1 挑戰(zhàn)問題之前——圖 218
12.2 圖的表示 221
12.3 深度優(yōu)先搜索 224
12.4 廣度優(yōu)先搜索 232
12.5 連通分量 237
第13章 加權圖 241
13.1 挑戰(zhàn)問題之前——加權圖 242
13.2 最小生成樹 244
13.3 單源最短路徑 249
第3部分 [應用篇]程序設計競賽的必備程序庫 261
第14章 高等數據結構 263
14.1 互質的集合 264
14.2 范圍搜索 269
14.3 其他問題 278
第15章 高等圖算法 279
15.1 所有點對間最短路徑 280
15.2 拓撲排序 284
15.3 關節(jié)點 290
15.4 樹的直徑 295
15.5 最小生成樹 299
15.6 其他問題 303
第16章 計算幾何學 305
16.1 幾何對象的基本元素與表現 306
16.2 直線的正交/平行判定 312
16.3 投影 314
16.4 映象 316
16.5 距離 317
16.6 逆時針方向 321
16.7 判斷線段相交 324
16.8 線段的交點 326
16.9 圓與直線的交點 328
16.10 圓與圓的交點 331
16.11 點的內包 333
16.12 凸包 335
16.13 線段相交問題 339
16.14 其他問題 343
第17章 動態(tài)規(guī)劃法 345
17.1 硬幣問題 346
17.2 背包問題 349
17.3 最長遞增子序列 353
17.4 最大正方形 357
17.5 最大長方形 360
17.6 其他問題 364
第18章 數論 367
18.1 質數檢驗 368
18.2 最大公約數 372
18.3 冪乘 376
18.4 其他問題 378
第19章 啟發(fā)式搜索 381
19.1 八皇后問題 382
19.2 九宮格拼圖 386
19.3 十六格拼圖 391
附錄 399
通過本書可以獲得的技能 400
挑戰(zhàn)以往的程序設計競賽真題! 402
參考文獻 404