新到貨2本75折
算法訓練營:海量圖解+競賽刷題(進階篇)

算法訓練營:海量圖解+競賽刷題(進階篇)

  • 定價:839
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

本書以海量圖解的形式,詳細講解常用的資料結構與演算法,並結合競賽實例引導讀者進行刷題實戰。通過對本書的學習,讀者可掌握22種高級資料結構、7種動態規劃演算法、5種動態規劃優化技巧,以及5種網路流演算法,並熟練應用各種演算法解決實際問題。

本書總計8章。第1章講解實用資料結構,包括並查集、優先佇列;第2章講解區間資訊維護與查詢,包括倍增、ST、RMQ、LCA、樹狀陣列、線段樹和分塊;第3章講解字串處理,包括字典樹、AC自動機和尾碼陣列;第4章講解樹上操作問題,包括點分治、邊分治、樹鏈剖分和動態樹;第5章講解各種平衡二叉樹,包括Treap、伸展樹和SBT;第6章講解資料結構進階,包括KD樹、左偏樹、跳躍表、樹套樹和可持久化資料結構;第7章講解動態規劃及其優化,包括背包問題、線性DP、區間DP、樹形DP、數位DP、狀態壓縮DP、插頭DP和動態規劃優化方法;第8章講解網路流問題,包括常用網路流演算法、二分圖最da匹配、最da流最xiao割定理和最xiao費用最da流。本書對每個演算法都進行詳細圖解並搭配競賽實例,重點講解如何分析問題、優化演算法,以期讀者在短時間內掌握該演算法並進行刷題實戰。

本書面向對演算法感興趣的讀者,無論是想扎實內功或參加演算法競賽的學生,還是想進入行業領先企業的求職者,抑或是想提升技術的在職人員,都可以參考本書。若讀者從未學過資料結構與演算法方面的基礎知識,則可參考《演算法訓練營:海量圖解+競賽刷題(入門篇)》。
 
 

作者介紹

陳小玉

南陽理工學院副教授,高級程式師,主要研究方向為演算法優化和機器學習。出版著作有《趣學演算法》《趣學資料結構》《演算法訓練營:海量圖解+競賽刷題(入門篇)》《演算法訓練營:海量圖解+競賽刷題(進階篇)》,所教學生多次獲得ACM、藍橋杯等演算法競賽獎項。
 
 

目錄

第1章 實用資料結構... 1
1.1 並查集... 1
原理 並查集詳解... 1
訓練1 暢通工程
訓練2 方塊棧... 7
訓練3 食物鏈... 10
訓練4 幫派... 16
1.2 優先佇列... 19
原理1 優先佇列的實現原理... 19
原理2 優先佇列詳解... 23
訓練1 第k大的數... 26
訓練2 圍欄修復... 27
訓練3 表演評分... 29
訓練4 叢林探險
 
第2章 區間資訊維護與查詢... 33
2.1 倍增、ST、RMQ.. 33
原理1 倍增... 33
原理2 ST. 34
原理3 RMQ.. 36
訓練1 區間最值差... 36
訓練2 最頻繁值... 37
訓練3 最小分段數... 40
訓練4 二維區間最值差.... 41
2.2 最近公共祖先LCA.. 43
原理1 暴力搜索法... 44
原理2 樹上倍增法... 45
原理3 線上RMQ演算法... 49
原理4 Tarjan演算法... 51
訓練1 最近公共祖先... 55
訓練2 樹上距離... 57
訓練3 距離查詢... 59
訓練4 城市之間的聯繫... 60
2.3 樹狀陣列... 62
原理1 一維樹狀陣列... 62
原理2 多維樹狀陣列... 67
訓練1 數星星... 69
訓練2 公路交叉數... 71
訓練3 子樹查詢... 74
訓練4 矩形區域查詢... 76
2.4 線段樹... 78
原理1 線段樹的基本操作... 78
原理2 線段樹中的“懶操作”... 83
訓練1 敵兵佈陣... 87
訓練2 簡單的整數問題... 89
訓練3 資料結構難題... 91
訓練4 顏色統計... 97
2.5 分塊... 102
原理 分塊詳解... 102
訓練1 簡單的整數問題... 105
訓練2 數字序列... 106
訓練3 區間最值差... 107
訓練4 超級馬里奧... 109
訓練5 序列操作
 
第3章 字串處理... 115
3.1 字典樹... 115
原理 字典樹詳解... 115
訓練1 單詞翻譯... 120
訓練2 電話表... 122
訓練3 統計難題... 123
訓練4 彩色的木棒... 124
訓練5 最長xor路徑... 127
3.2 AC自動機... 129
原理 AC自動機詳解... 129
訓練1 關鍵字檢索... 132
訓練2 病毒侵襲... 134
訓練3 DNA序列... 136
訓練4 單詞情結... 140
3.3 尾碼陣列... 145
原理1 基數排序... 145
原理2 尾碼陣列詳解... 152
訓練1 牛奶模式... 169
訓練2 口吃的外星人... 171
訓練3 音樂主題... 173
訓練4 星際迷航
 
第4章 樹上操作... 178
4.1 點分治... 178
原理 重心分解... 178
訓練1 樹上兩點之間的路徑數... 179
訓練2 遊船之旅... 185
訓練3 摩天大樹... 189
訓練4 查詢子樹... 194
4.2 邊分治... 200
原理 邊分治詳解... 200
訓練1 樹上查詢I 203
訓練2 樹上查詢II 212
訓練3 樹上兩點之間的路徑數... 217
4.3 樹鏈剖分... 221
原理 樹鏈剖分詳解... 221
訓練1 樹上距離... 230
訓練2 樹的統計... 231
訓練3 家庭主婦... 232
訓練4 樹上操作... 233
4.4 動態樹... 236
原理 動態樹詳解... 236
訓練1 距離查詢... 247
訓練2 動態樹xor和... 249
訓練3 動態樹的最值... 252
訓練4 動態樹的第2大值... 255
訓練5 樹上操作
 
第5章 平衡二叉樹... 263
5.1 Treap. 263
原理 Treap詳解... 263
訓練1 雙重佇列... 270
訓練2 普通平衡樹... 272
訓練3 黑盒子... 276
訓練4 少林功夫... 279
5.2 伸展樹... 283
原理 伸展樹詳解... 283
訓練1 雙重佇列... 291
訓練2 玩鏈子... 293
訓練3 超強記憶... 300
訓練4 迴圈... 310
5.3 SBT. 324
原理 SBT詳解... 324
訓練1 雙重佇列... 331
訓練2 第k小的數... 333
訓練3 第k大的數... 334
訓練4 區間第k小... 334
訓練5 鬱悶的出納員
 
第6章 資料結構進階... 339
6.1 KD樹... 339
原理 KD樹詳解... 339
訓練1 最近的取款機... 343
訓練2 找旅館... 346
訓練3 最近鄰M點... 348
訓練4 蟻巢... 349
6.2 左偏樹... 352
原理 左偏樹詳解... 352
訓練1 猴王... 360
訓練2 小根堆... 363
訓練3 路面修整... 365
訓練4 K-單調... 369
6.3 跳躍表... 373
原理 跳躍表詳解... 373
訓練1 雙重佇列... 379
訓練2 第k大的數... 381
訓練3 鬱悶的出納員... 386
6.4 樹套樹... 388
原理 樹套樹詳解... 388
訓練1 動態區間問題... 389
訓練2 動態區間第k小... 395
訓練3 矩形區域查詢... 396
訓練4 馬賽克處理... 400
6.5 可持久化資料結構... 406
原理1 可持久化線段樹詳解... 406
原理2 可持久化Trie詳解... 413
訓練1 超級馬里奧... 415
訓練2 記憶重現... 419
訓練3 最大異或和
 
第7章 動態規劃及其優化... 431
7.1 動態規劃求解原理... 431
原理1 動態規劃的三個要素... 432
原理2 動態規劃設計方法... 432
7.2 背包問題... 433
原理1 01背包... 433
訓練1 骨頭收藏家... 441
原理2 完全背包... 443
訓練2 存錢罐... 443
原理3 多重背包... 445
訓練3 硬幣... 447
原理4 分組背包... 449
訓練4 價值最大化... 450
原理5 混合背包... 452
訓練5 最少的硬幣... 452
7.3 線性DP. 455
訓練1 超級樓梯... 455
訓練2 數字三角形... 456
訓練3 最長上升子序列... 458
訓練4 最長公共子序列... 461
訓練5 最大連續子段和... 462
7.4 區間DP. 464
訓練1 回文... 464
訓練2 括弧匹配... 466
訓練3 猴子派對... 468
訓練4 乘法難題... 470
7.5 樹形DP. 472
訓練1 別墅派對... 473
訓練2 戰略遊戲... 476
訓練3 工人請願書... 478
訓練4 完美的服務... 480
訓練5 背包類樹形DP. 484
訓練6 蘋果樹... 487
訓練7 二次掃描與換根... 490
訓練8 最遠距離... 494
7.6 數位DP. 497
訓練1 不吉利的數字... 498
訓練2 定時炸彈... 503
訓練3 Round Numbers. 506
訓練4 計數問題... 508
訓練5 數字權值... 511
7.7 狀態壓縮DP. 513
訓練1 旅行商問題... 514
訓練2 旅行商變形1. 520
訓練3 旅行商變形2. 521
訓練4 玉米田... 523
訓練5 炮兵陣地... 525
訓練6 馬車旅行... 528
7.8 插頭DP. 531
訓練1 鋪磚... 531
訓練2 方格取數... 537
訓練3 多回路連通性問題... 539
訓練4 單回路連通性問題... 543
訓練5 單通路連通性問題... 550
7.9 動態規劃優化... 552
原理1 倍增優化... 552
原理2 資料結構優化... 552
訓練1 最長公共上升子序列... 552
訓練2 有序子序列... 554
訓練3 最大化器... 557
訓練4 灑水裝置... 559
原理3 單調佇列優化... 562
訓練5 滑動窗口... 563
訓練6 灑水裝置... 564
訓練7 股票交易... 565
原理4 斜率優化... 568
訓練8 列印文章... 569
訓練9 覆蓋走道... 573
訓練10 批次處理調度... 575
訓練11 劃分... 580
訓練12 勞倫斯... 583
原理5 四邊不等式優化... 587
訓練13 劃分
 
第8章 網路流... 592
8.1 EK演算法... 595
原理 EK演算法詳解... 595
訓練1 最大流問題... 600
訓練2 排水系統... 600
8.2 Dinic演算法... 601
原理 Dinic演算法詳解... 601
訓練1 最大銷售量... 605
訓練2 電力網絡.... 606
8.3 ISAP演算法... 608
原理 ISAP演算法詳解... 608
訓練1 島嶼運輸... 613
訓練2 美味佳餚... 614
訓練3 跳躍蜥蜴... 615
訓練4 計算機工廠... 618
8.4 二分圖匹配... 619
原理1 最大匹配演算法... 620
原理2 匈牙利演算法... 621
訓練1 完美的牛棚... 624
訓練2 機器調度... 625
訓練3 逃脫... 626
8.5 最大流最小割... 627
原理 最大流最小割定理... 627
訓練1 最小邊割集... 629
訓練2 最小點割集... 631
訓練3 雙核CPU.. 632
訓練4 最大收益... 633
8.6 最小費用最大流... 635
原理 最小費用路演算法... 635
訓練1 農場之旅... 639
訓練2 航空路線... 640
訓練3 區間覆蓋... 642
訓練4 疏散計畫... 643
 
 

近年來,演算法行業非常火爆,越來越多的人在學習演算法。目前,電腦的最重要領域之一是人工智慧,而人工智慧的核心是演算法,演算法已滲透到互聯網、商業、金融業、航空、軍事等各個領域,正在改變著這個世界。

寫作背景

在IT領域,資料結構與演算法的應用無處不在。資料結構與演算法是電腦開發人員的基本功,很多面試都要考查資料結構與演算法。學習資料結構與演算法不僅可以培養我們的演算法思維,提高我們分析問題、解決問題的能力,還可以讓我們快速學習新技術,以更高的視角看待問題。

資料結構與演算法教材一般晦澀難懂。為了讓更多的人輕鬆學習演算法、愛上演算法,筆者寫作了《趣學資料結構》《趣學演算法》兩本書。筆者發現,讀者特別喜歡搭配了大量圖解的通俗易懂的講解方式。很多讀者也在呼籲筆者寫一本結合演算法競賽實例進行講解的書。經過近兩年的籌備,《演算法訓練營:海量圖解+競賽刷題(入門篇)》和《演算法訓練營:海量圖解+競賽刷題(進階篇)》兩本書終於要和大家見面了,非常感謝各位讀者的大力支持。

學習建議

演算法學習的過程,實際上是通過大量實例,充分體會遇到問題時該如何分析:採用什麼資料結構,使用什麼演算法策略,演算法的複雜性如何,是否有優化的可能,等等。這裡有以下幾個建議。

⊃2; 第1個建議:學經典,多理解。

演算法書有很多,初學者最好選擇圖解較多的入門書,當然,也可以選擇多本書,從多個角度進行對比和學習。先看書中的圖解,理解各種經典問題的求解方法,如果還不明白,則可以看視頻講解,理解之後再看代碼,嘗試自己動手上機運行。如有必要,則可以將演算法的求解過程通過圖解方式展示出來,以加深對演算法的理解。

⊃2; 第2個建議:看題解,多總結。

在掌握書中的經典演算法之後,可以在刷題網站進行專項練習,比如貪心演算法、分治演算法、動態規劃、網路流等。演算法比資料結構更加靈活,對同一道題目可以採用不同的演算法解決,演算法複雜性也不同。如果想不到答案,則可以看題解,比較自己的想法與題解的差距。要多總結題目類型及最優解法,然後找相似的題目並自己動手解決問題。

⊃2; 第3個建議:舉一反三,靈活運用。

通過專項刷題,見多識廣,總結常用的演算法範本,熟練應用套路,舉一反三、靈活運用,逐步提升刷題速度,力爭“bug free”(無缺陷)。

如何進行刷題實戰

刷題的過程就是熟練應用資料結構與演算法的過程。在刷題過程中,要學會分析問題、解決問題的方法,總結常用的演算法範本和套路,快速寫出代碼,通過鍛煉達到“bug free”。可以集中時間進行系統性專項刷題,不可三天打魚、兩天曬網,也不可隨機刷題。題不在多,在於精。通過看書掌握一種資料結構與演算法之後,便可找該知識相關的簡單題目試手,從易到難。刷題時,可以先在編譯系統中編譯通過,等測試用例通過且檢查無誤後再提交,因為在比賽中多次提交會被罰時。刷題網站有很多,演算法競賽刷題網站有Vjudge、POJ、HDU、Code Forces、洛穀等,找工作刷題網站有LeetCode。提交結果類型如下。

— AC(Accepted):通過。
— WA(Wrong Answer):答案錯誤。
— TLE(Time Limit Exceed):超時。
— OLE(Output Limit Exceed):超過輸出限制。
— MLE(Memory Limit Exceed):超出記憶體。
— RE(Runtime Error):執行階段錯誤。
— PE(Presentation Error):格式錯誤。
— CE(Compile Error):無法編譯。

測試用例通過而提交不通過是很正常的,因為在測試用例中僅有一兩組資料,而在後臺有大量測試資料。遇到提交不通過的情況時,要首先根據提示判斷錯誤類型,根據錯誤類型分析原因;然後冷靜分析演算法邏輯、易錯點、特殊情況判斷等,看看選擇的資料結構和演算法是否合適,是否存在閉環。在刷題過程中會發現很多“坑”,一定要記錄下來,避免下次“踩坑”。

看題目時要看資料規模、時間限制和空間限制,看看設計的演算法是否會超時超限,做到心中有數。如果限制時間為1s,則問題規模(n)和演算法時間複雜度之間的關係如下。

— n≤11:O(n!)。
— n≤25:O(2n)。
— n≤5000:O(n2)。
— n≤106:O(nlogn)。
— n≤107:O(n)。
— n>108:O(logn)。

本書特色

本書具有以下特色。

(1)完美圖解,通俗易懂。本書對每個演算法的基本操作都有圖解演示,通過圖解,許多問題都變得簡單,可迎刃而解。

(2)實例豐富,簡單有趣。本書結合大量競賽實例,講解如何利用資料結構與演算法解決實際問題,使複雜難懂的問題變得簡單有趣,説明讀者輕鬆掌握演算法知識,體會其中的妙處。

(3)深入淺出,透析本質。本書透過問題看本質,重點講解如何分析和解決問題。本書採用了簡潔易懂的代碼,對資料結構設計和演算法的描述全面細緻,而且有演算法複雜性分析及優化過程。

(4)實戰演練,循序漸進。本書在對每個資料結構與演算法講解清楚後,都進行了實戰演練,使讀者在實戰中體會資料結構與演算法的設計和操作,從而提高獨立思考、動手實踐的能力。書中有豐富的練習題和競賽題,可幫助讀者及時檢驗知識掌握情況,為從小問題出發,逐步解決大型複雜性工程問題奠定基礎。

(5)網路資源,技術支援。本書為讀者提供書中所有範例程式的原始程式碼、競賽題及答案解析,讀者對這些原始程式碼可以自由修改編譯,以符合自己的需要。本書提供博客、微信群、QQ群技術支援,可隨時為讀者答疑解惑。

建議和回饋

寫書是極其瑣碎、繁重的工作,儘管筆者已經盡力使本書的內容和網路支援接近完美,但仍然可能存在很多漏洞和瑕疵。歡迎讀者提供關於本書的回饋意見,因為對本書的評論和建議都有利於我們改進和提高,以幫助更多的讀者。如果對本書有什麼評論和建議,或者有問題需要幫助,則可以致信rainchxy@126.com與筆者交流,筆者將不勝感激。

讀者資源請參照本書封底提示。

致謝

感謝筆者的家人和朋友在本書寫作過程中提供的大力支持。感謝電子工業出版社工作嚴謹、高效的張國霞編輯促成本書的早日出版。感謝提供寶貴意見的同事們。感謝提供技術支援的同學們。感恩遇到這麼多良師益友!
 
 

詳細資料

  • ISBN:9787121408861
  • 規格:平裝 / 656頁 / 16k / 19 x 26 x 3.28 cm / 普通級 / 單色印刷 / 初版
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 【科普、飲食、電腦】高寶電子書暢銷書展:人生就是選擇的總和,全展75折起
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 翦商作者新作79折
  • 針灸匠張寶旬