編輯推薦
《算法問題實戰策略》收錄程序設計競賽經典試題,在解題過程中講解各種算法設計技巧和數據結構,培養讀者的解題能力。讀者可親自編寫各章習題程序並獲得評分,所有示例均附有解題過程及詳細說明。
內容簡介
《算法問題實戰策略》收錄程序設計競賽經典試題,在解題過程中講解各種算法設計技巧和數據結構,培養讀者的解題能力。讀者可親自編寫各章習題程序並獲得評分,所有示例均附有解題過程及詳細說明。 本書主要內容 第一部分 開始解決問題 第二部分 算法分析 第三部分 算法設計範式 第四部分 一些著名的算法 第五部分 基本數據結構 第六部分 樹 第七部分 圖。
《算法問題實戰策略》是學習解題技巧時必不可少的經典,不僅適閤準備參賽的人閱讀,書中對現有算法的檢驗和優化後的代碼等,都對實際業務有非常大的幫助。本書作者是算法競賽領域的人士,他利用自己多年積纍的經驗,通過多個解題示例幫助大傢輕鬆學習算法。
作者簡介
具宗萬 , 畢業於韓國延世大學計算機科學係,曾在innotive公司和NHN公司任軟件工程師,現在芝加哥高頻交易(HFT)公司從事算法交易開發工作。2007年開始參與運營韓國程序設計競賽參賽者網絡社交平颱algospot。
獲奬經曆
2002年、2003年 韓國大學生程序設計競賽 金奬
2003年、2004年 世界大學生程序設計競賽 入圍決賽
2004年、2006年、2008年 Google Code Jam 入圍決賽
2007年 Top Coder Open 亞軍,2006年 入圍決賽
2008年、2009年 Java算法競賽 冠軍
內頁插圖
精彩書評
★本書是學習解題技巧時必不可少的經典。
——劉元和(KAIST,2009年韓國大學生程序設計競賽冠軍)
★本書不僅適閤準備參賽的人閱讀,書中對現有算法的檢驗和優化後的代碼等,都對實際業務有非常大的幫助。
——崔如民(EA Korea Lead Software工程師,2005年世界大學生程序設計競賽第13名)
★我有14年程序設計競賽參賽經驗,如果12年前看到這本書就好瞭。
——李後然(斯坦福大學,國際信息學奧林匹剋競賽冠軍)
★本書作者是算法競賽領域的人士,看到他利用自己多年積纍的經驗,通過多個解題示例幫助大傢輕鬆學習算法,我感到非常高興。
——吳時英(卡耐基梅隆大學,國際信息學奧林匹剋競賽亞軍)
目錄
第一部分開始解決問題
第1章解決問題與程序設計競賽4
1.1引言4
1.2程序設計競賽4
1.3閱讀本書的方法7
1.4值得參加的程序設計競賽8
1.5對賽前準備工作的一些建議9
1.6續讀12
第2章解決問題概述13
2.1引言13
2.2解決問題的過程13
2.3解決問題的策略17
2.4續讀26
第3章編碼與調試27
3.1引言:不要忽視編碼的重要性27
3.2編寫優秀代碼的原則27
3.3常見失誤32
3.4調試與測試39
3.5變量的取值範圍42
3.6理解實數型數據類型46
3.7續讀55
第二部分算法分析
第4章分析算法的時間復雜度60
4.1引言60
4.2綫性時間算法62
4.3次綫性時間算法65
4.4指數時間算法67
4.5時間復雜度70
4.6推測執行時間76
4.7計算復雜度類:P、NP、NP-完備81
4.8續讀84
第5章算法正確性證明85
5.1引言85
5.2數學歸納法和循環不變式86
5.3歸謬法90
5.4其他技巧92
5.5續讀95
第三部分算法設計範式
第6章暴力解決法99
6.1引言99
6.2遞歸調用和窮舉搜索法100
6.3練習題:郊遊(習題ID:PICNIC,難度:低)106
6.4解題:郊遊107
6.5練習題:蓋遊戲闆(習題ID:BOARDCOVER,難度:低)109
6.6解題:蓋遊戲闆111
6.7優化問題113
6.8練習題:時鍾同步(習題ID:CLOCKSYNC,難度:中)116
6.9解題:時鍾同步117
6.10常見窮舉搜索類型119
第7章分治法120
7.1引言120
7.2練習題:四叉樹問題(題目ID:QUADTREE,難度:低)130
7.3解題:四叉樹問題131
7.4練習題:切割籬笆(習題ID:FENCE,難度:中)134
7.5解題:切割籬笆135
7.6練習題:粉絲見麵會(題目ID:FANMEETING,難度:高)139
7.7解題:粉絲見麵會141
第8章動態規劃法143
8.1引言143
8.2練習題:通配符(習題ID:WILDCARD,難度:中)151
8.3解題:通配符152
8.4典型優化問題156
8.5練習題:閤並LIS(題目ID:JLIS,難度:低)163
8.6解題:閤並LIS164
8.7練習題:背誦圓周率(題目ID:PI,難度:低)166
8.8解題:背誦圓周率167
8.9練習題:Quantization(題目ID:QUANTIZE,難度:中)169
8.10解題:Quantization170
8.11所有可能的個數與概率174
8.12練習題:非對稱鋪設(題目ID:ASYMTILING,難度:低)180
8.13解題:非對稱鋪設181
8.14練習題:多聯骨牌(題目ID:POLY,難度:中)183
8.15解題:多聯骨牌185
8.16練習題:逃獄的韓尼拔博士(題目ID:NUMB3RS,難度:中)187
8.17解題:逃獄的韓尼拔博士189
第9章動態規劃技巧194
9.1計算優化問題的實際答案194
9.2練習題:打包行李(題目ID:PACKING,難度:中)195
9.3解題:打包行李197
9.4練習題:光學字符識彆(題目ID:OCR,難度:高)199
9.5解題:光學字符識彆201
9.6計算第k個答案204
9.7練習題:第k個最大遞增子序列(題目ID:KLIS,難度:高)209
9.8解題:第k個最長遞增子序列210
9.9練習題:龍麯綫(題目ID:DRAGON,難度:中)214
9.10解題:龍麯綫216
9.11對非整數型輸入的製錶219
9.12練習題:韋布巴津(題目ID:ZIMBABWE,難度:高)224
9.13解題:韋布巴津225
9.14練習題:恢復實驗數據(題目ID:RESTORE,難度:中)230
9.15解題:恢復實驗數據231
9.16組閤遊戲234
9.17練習題:數字遊戲(題目ID:NUMBERGAME,難度:低)239
9.18解題:數字遊戲240
9.19練習題:方塊遊戲(題目ID:BLOCKGAME,難度:中)242
9.20解題:方塊遊戲243
9.21迭代動態規劃法245
9.22練習題:迴轉壽司(題目ID:SUSHI,難度:中)249
9.23解題:迴轉壽司250
9.24練習題:Genius(題目ID:GENIUS,難度:中)253
9.25解題:Genius254
9.26續讀256
第10章貪心法257
10.1引言257
10.2練習題:加熱便當(題目ID:LUNCHBOX,難度:低)264
10.3解題:加熱便當265
10.4練習題:閤並字符串(題目ID:STRJOIN,難度:中)268
10.5解題:閤並字符串269
10.6練習題:米那斯雅諾(題目ID:MINASTIRITH,難度:高)273
10.7解題:米那斯雅諾275
第11章組閤搜索281
11.1引言281
11.2組閤搜索的方法283
11.3練習題:蓋遊戲闆2(題目ID:BOARDCOVER2,難度:低)298
11.4解題:蓋遊戲闆2299
11.5練習題:患有嚴重過敏癥的朋友們(題目ID:ALLERGY,難度:中)303
11.6解題:患有嚴重過敏癥的朋友們........304
11.7練習題:數謎(題目ID:KAKURO2,難度:中)307
11.8解題:數謎309
11.9續讀315
第12章將優化問題轉換為決策問題求解316
12.1引言316
12.2練習題:南極基地(題目ID:ARCTIC,難度:低)320
12.3解題:南極基地321
12.4練習題:加拿大旅行(題目ID:CANADATRIP,難度:中)323
12.5解題:加拿大旅行324
12.6練習題:退選課程(題目ID:WITHDRAWAL,難度:高)326
12.7解題:退選課程327
第四部分一些著名的算法
第13章數值分析331
13.1引言331
13.2二分法331
13.3練習題:提高獲勝率(題目ID:RATIO,難度:低)338
13.4解題:提高獲勝率339
13.5三叉搜索341
13.6練習題:花粉化石(題目ID:FOSSIL,難度:高)346
13.7解題:花粉化石347
13.8其他主題351
第14章整數論352
14.1引言352
14.2素數352
14.3練習題:密碼486(題目ID:PASS486,難度:中)357
14.4解題:密碼486357
14.5歐幾裏得算法360
14.6練習題:魔法藥水(題目ID:POTION,難度:中)361
14.7解題:魔法藥水362
14.8模運算364
14.9續讀366
第15章計算幾何367
15.1引言367
15.2計算幾何的工具367
15.3相交、距離、麵積373
15.4練習題:彈球模擬(題目ID:PINBALL,難度:高)377
15.5解題:彈球模擬379
15.6多邊形383
15.7練習題:金銀島(題目ID:TREASURE,難度:高)386
15.8解題:金銀島387
15.9練習題:是呆子?不是呆子?(題目ID:NERDS,難度:中)390
15.10解題:是呆子?不是呆子?392
15.11計算幾何算法設計範式396
15.12常見失誤與注意事項403
15.13續讀404
第五部分基本數據結構
第16章位掩碼410
16.1引言410
16.2利用位掩碼實現集閤413
16.3位掩碼應用示例417
16.4練習題:畢業學期(題目ID:GRADUATION,難度:中)420
16.5解題:畢業學期422
16.6續讀424
第17章部分和425
17.1引言425
17.2練習題:聖誕娃娃(題目ID:CHRISTMAS,難度:中)429
17.3解題:聖誕娃娃430
17.4其他學習內容432
第18章綫性數據結構433
18.1引言433
18.2動態數組433
18.3鏈錶437
18.4動態數組和鏈錶的比較440
18.5練習題:約瑟夫斯(題目ID:JOSEPHUS,難度:低)440
18.6解題:約瑟夫斯441
18.7續讀442
第19章隊列、棧以及雙端隊列443
19.1引言443
19.2隊列、棧以及雙端隊列的實現方法444
19.3隊列與棧的應用445
19.4練習題:不匹配括號(題目ID:BRACKETS2,難度:低)448
19.5解題:不匹配括號449
19.6練習題:分析外星信號(題目ID:ITES,難度:中)450
19.7解題:分析外星信號451
第20章字符串455
20.1引言455
20.2字符串檢索456
20.3練習題:宰河的保險箱(題目ID:JAEHASAFE,難度:中)466
20.4解題:宰河的保險箱467
20.5後綴數組468
20.6練習題:口頭禪(題目ID:HABIT,難度:中)476
20.7解題:口頭禪477
20.8續讀478
第六部分樹
第21章樹的實現與遍曆481
21.1引言481
21.2樹的遍曆483
21.3練習題:變更樹的遍曆順序(題目ID:TRAVERSAL,難度:低)484
21.4解題:變更樹的遍曆順序486
21.5練習題:要塞(題目ID:FORTRESS,難度:中)487
21.6解題:要塞488
第22章二叉搜索樹493
22.1引言493
22.2二叉搜索樹的定義和操作493
22.3時間復雜度分析與平衡二叉搜索樹496
22.4練習題:是呆子?不是呆子?2(題目ID:NERD2,難度:中)496
22.5解題:是呆子?不是呆子?2498
22.6直接實現平衡二叉搜索樹:樹堆501
22.7練習題:反轉插入排序(題目ID:INSERTION,難度:中)508
22.8解題:反轉插入排序509
第23章優先級隊列和堆511
23.1引言511
23.2堆的定義與實現方法512
23.3練習題:變化的中間值(題目ID:RUNNINGMEDIAN,難度:低)518
23.4解題:變化的中間值519
第24章區間樹521
24.1區間樹:區間相關問題解答521
24.2練習題:登山路(題目ID:MORDDR,難度:中)527
24.3解題:登山路528
24.4練習題:尋根問祖(題目ID:FAMILYTREE,難度:高)529
24.5解題:尋根問祖530
24.6樹狀數組:快速而簡單的區間和533
24.7練習題:計算插入排序的時間(題目ID:MEASURETIME,難度:中)536
24.8解題:計算插入排序的時間537
第25章互斥集閤541
25.1引言541
25.2練習題:編輯器之爭(題目ID:EDITORWARS,難度:中)546
25.3解題:編輯器之爭548
第26章字典樹553
26.1引言553
26.2練習題:再見,謝謝所有的魚(題目ID:SOLONG,難度:中)557
26.3解題:再見,謝謝所有的魚559
26.4利用字典樹檢索多重字符串563
26.5練習題:安全終結者(題目ID:NH,難度:高)569
26.6解題:安全終結者570
第七部分圖
第27章圖的錶示方式及定義576
27.1引言576
27.2圖的應用示例579
27.3隱式圖結構580
27.4圖的幾種錶示法581
第28章圖的深度優先搜索585
28.1引言585
28.2練習題:古語詞典(習題ID:DICTIONARY,難度:低)590
28.3解題:古語詞典591
28.4歐拉迴路594
28.5練習題:有限單詞接龍(題目ID:WORDCHAIN,難度:低)597
28.6解題:有限單詞接龍598
28.7理論背景及應用602
28.8練習題:安裝監控攝像頭(題目ID:GALLERY,難度:中)613
28.9解題:安裝監控攝像頭614
28.10練習題:安排會議室(題目ID:MEETINGROOM,難度:高)616
28.11解題:安排會議室618
第29章圖的寬度優先搜索625
29.1引言625
29.2練習題:排序遊戲(題目ID:SORTGAME,難度:中)629
29.3解題:排序遊戲630
29.4練習題:兒童節(題目ID:CHILDRENDAY,難度:高)633
29.5解題:兒童節634
29.6最短路徑策略637
29.7練習題:漢諾塔(題目ID:HANOI4B,難度:中)648
29.8解題:漢諾塔650
第30章最短路徑問題653
30.1引言653
30.2迪傑斯特拉最短路徑算法654
30.3練習題:信號路由(題目ID:ROUTING,難度:低)661
30.4解題:信號路由662
30.5練習題:消防車(題目ID:FIRETRUCKS,難度:中)663
30.6解題:消防車664
30.7練習題:鐵人N項比賽(題目ID:NTHLON,難度:高)665
30.8解題:鐵人N項比賽667
30.9貝爾曼-福特最短路徑算法669
30.10練習題:時間旅行(題目ID:TIMETRIP,難度:中)674
30.11解題:時間旅行675
30.12弗洛伊德多源最短路徑算法677
30.13練習題:檢查酒駕(題目ID:DRUNKEN,難度:中)682
30.14解題:檢查酒駕684
30.15練習題:競選承諾(題目ID:PROMISES,難度:中)685
30.16解題:競選承諾687
第31章最小生成樹689
31.1引言689
31.2剋魯斯剋爾最小生成樹算法690
31.3普裏姆最小生成樹算法694
31.4練習題:局域網(題目ID:LAN,難度:低)697
31.5解題:局域網698
31.6練習題:選定旅行路綫(題目ID:TPATH,難度:高)699
31.7解題:選定旅行路綫700
第32章網絡流705
32.1引言705
32.2福特-富爾剋森算法706
32.3網絡建模713
32.4練習題:操縱比賽(題目ID:MATCHFIX,難度:中)715
32.5解題:操縱比賽717
32.6練習題:國傢項目(題目ID:PROJECTS,難度:高)719
32.7解題:國傢項目720
32.8二分圖匹配723
32.9練習題:象(題目ID:BISHOPS,難度:中)729
32.10解題:象730
32.11練習題:設置陷阱(題目ID:TRAPCARD,難度:高)732
32.12解題:設置陷阱734
32.13其他學習內容737
前言/序言
程序設計是一門高難度的學科,很多接受過良好的計算機教育的學生在畢業後仍對程序設計感到吃力。不少軟件公司常常怨聲不斷,招來的新人都畢業於名校計算機專業,卻連一行程序代碼都寫不齣來。即使這並不是程序設計的問題,而是大學教育的痼疾,但像程序設計這樣能夠真實體現“天纔與庸纔的效率相差20倍” 這句話的行業並不多見。
這種現象的根本原因在於,大部分計算機科學相關的教育課程隻教授程序設計的技術和知識,而忽視瞭自主應用的能力。所以,接受瞭這種教育的學生好比僅用語法書和詞典學習外語的人一樣,隻能機械地解釋文字,卻不能欣賞詩歌,也寫不齣令人感動的文章。就算學習算法後
算法問題實戰策略 下載 mobi epub pdf txt 電子書