編輯推薦
世界程序設計高手的經驗總結
【ACM-ICPC全球總冠軍】巫澤俊主譯
日本ACM-ICPC參賽者人手一冊
內容簡介
《挑戰程序設計競賽(第2版)》對程序設計競賽中的基礎算法和經典問題進行瞭匯總,分為準備篇、初級篇、中級篇與高級篇4章。作者結閤自己豐富的參賽經驗,對嚴格篩選的110 多道各類試題進行瞭由淺入深、由易及難的細緻講解,並介紹瞭許多實用技巧。每章後附有習題,供讀者練習,鞏固所學。
作者簡介
★鞦葉拓哉
Google Code Jam 2010 第9名
ACM-ICPC World Finals 2012 第11名
TopCoder Open 2012 Algorithm 第4名
昵稱iwi
★岩田陽一
Google Code Jam 2009 第3名
TopCoder Open 2010 Marathon 冠軍
IPSC 2010 個人組 冠軍
昵稱wata
★北川宜稔
ACM-ICPC World Finals 2010第16名
昵稱kita_masa
譯者簡介:
★巫澤俊
ACM-ICPC World Finals 2009 第6名
ACM-ICPC World Finals 2011 冠軍
Google Code Jam 2012 第7名
昵稱watashi和rejudge
★莊俊元
ACM-ICPC Asia Phuket Regional 2011 冠軍
2012年躋身ACM-ICPC World Finals以及百度Astar總決賽
昵稱navi和navimoe
★李津羽
浙江大學2011級計算機係博士生
在浙大CAD&CG;實驗室從事科研工作
內頁插圖
目錄
第1章 蓄勢待發--準備篇
1.1 何謂程序設計競賽
1.2 最負盛名的程序設計競賽
1.2.1 世界規模的大賽--Google Code Jam(GCJ)
1.2.2 嚮高排名看齊!--TopCoder
1.2.3 曆史最悠久的競賽-- ACM-ICPC
1.2.4 麵嚮中學生的信息學奧林匹剋競賽--JOI-IOI
1.2.5 通過網絡自動評測--Online Judge(OJ)
1.3 本書的使用方法
1.3.1 本書所涉及的內容
1.3.2 所用的編程語言
1.3.3 題目描述的處理
1.3.4 程序結構
1.3.5 練習題
1.3.6 讀透本書後更上一層樓的練習方法
1.4 如何提交解答
1.4.1 POJ的提交方法
1.4.2 GCJ的提交方法
1.5 以高效的算法為目標
1.5.1 什麼是復雜度
1.5.2 關於運行時間
1.6 輕鬆熱身
1.6.1 先從簡單題開始
1.6.2 POJ的題目Ants
1.6.3 難度增加的抽簽問題
第2章 初齣茅廬--初級篇
2.1 最基礎的“窮竭搜索”
2.1.1 遞歸函數
2.1.2 棧
2.1.3 隊列
2.1.4 深度優先搜索
2.1.5 寬度優先搜索
2.1.6 特殊狀態的枚舉
2.1.7 剪枝
2.2 一往直前!貪心法
2.2.1 硬幣問題
2.2.2 區間問題
2.2.3 字典序最小問題
2.2.4 其他例題
2.3 記錄結果再利用的“動態規劃”
2.3.1 記憶化搜索與動態規劃
2.3.2 進一步探討遞推關係
2.3.3 有關計數問題的DP
2.4 加工並存儲數據的數據結構
2.4.1 樹和二叉樹
2.4.2 優先隊列和堆
2.4.3 二叉搜索樹
2.4.4 並查集
2.5 它們其實都是“圖”
2.5.1 圖是什麼
2.5.2 圖的錶示
2.5.3 圖的搜索
2.5.4 最短路問題
2.5.5 最小生成樹
2.5.6 應用問題
2.6 數學問題的解題竅門
2.6.1 輾轉相除法
2.6.2 有關素數的基礎算法
2.6.3 模運算
2.6.4 快速冪運算
2.7 一起來挑戰GCJ的題目(1)
2.7.1 Minimum Scalar Product
2.7.2 Crazy Rows
2.7.3 Bribe the Prisoners
2.7.4 Millionaire
第3章 齣類拔萃--中級篇
3.1 不光是查找值!“二分搜索”
3.1.1 從有序數組中查找某個值
3.1.2 假定一個解並判斷是否可行
3.1.3 最大化最小值
3.1.4 最大化平均值
3.2 常用技巧精選(一)
3.2.1 尺取法
3.2.2 反轉(開關問題)
3.2.3 彈性碰撞
3.2.4 摺半枚舉(雙嚮搜索)
3.2.5 坐標離散化
3.3 活用各種數據結構
3.3.1 綫段樹
3.3.2 Binary Indexed Tree
3.3.3 分桶法和平方分割
3.4 熟練掌握動態規劃
3.4.1 狀態壓縮DP
3.4.2 矩陣的冪
3.4.3 利用數據結構高效求解
3.5 藉助水流解決問題的網絡流
3.5.1 最大流
3.5.2 最小割
3.5.3 二分圖匹配
3.5.4 一般圖匹配
3.5.5 匹配、邊覆蓋、獨立集和頂點覆蓋
3.5.6 最小費用流
3.5.7 應用問題
3.6 與平麵和空間打交道的計算幾何
3.6.1 計算幾何基礎
3.6.2 極限情況
3.6.3 平麵掃描
3.6.4 凸包
3.6.5 數值積分
3.7 一起來挑戰GCJ的題目(2)
3.7.1 Numbers
3.7.2 No Cheating
3.7.3 Stock Charts
3.7.4 Watering Plants
3.7.5 Number Sets
3.7.6 Wi-fi Towers
第4章 登峰造極--高級篇
4.1 更加復雜的數學問題
4.1.1 矩陣
4.1.2 模運算的世界
4.1.3 計數
4.1.4 具有對稱性的計數
4.2 找齣遊戲的必勝策略
4.2.1 遊戲與必勝策略
4.2.2 Nim
4.2.3 Grundy數
4.3 成為圖論大師之路
4.3.1 強連通分量分解
4.3.2 2-SAT
4.3.3 LCA
4.4 常用技巧精選(二)
4.4.1 棧的運用
4.4.2 雙端隊列的運用
4.4.3 倍增法
4.5 開動腦筋智慧搜索
4.5.1 剪枝
4.5.2 A*與IDA*
4.6 劃分、解決、閤並:分治法
4.6.1 數列上的分治法
4.6.2 樹上的分治法
4.6.3 平麵上的分治法
4.7 華麗地處理字符串
4.7.1 字符串上的動態規劃算法
4.7.2 字符串匹配
4.7.3 後綴數組
4.8 一起來挑戰GCJ的題目(3)
4.8.1 Mine Layer
4.8.2 Year of More Code Jam
4.8.3 Football Team
4.8.4 Endless Knight
4.8.5 The Year of Code Jam
本書中未涉及的拓展主題
書中例題列錶
參考文獻
精彩書摘
2.5.5 最小生成樹
給定一個無嚮圖,如果它的某個子圖中任意兩個頂點都互相連通並且是一棵樹,那麼這棵樹就叫做生成樹(Spanning Tree)。如果邊上有權值,那麼使得邊權和最小的生成樹叫做最小生成樹(MST,Minimum Spanning Tree)。
例如我們假設有這樣一個圖:把頂點看作村莊,邊看作計劃要修建的道路。為瞭在所有的村莊間通行,恰好修建村莊數目—1條道路時的情形就對應瞭一棵生成樹。修建道路需要投入建設費,那麼求解使得道路建設費用最小的生成樹就是最小生成樹問題。
常見的求解最小生成樹的算法有Kruskal算法和Prim算法。很顯然,生成樹是否存在和圖是否連通是等價的,因此我們假定圖是連通的。
1.最小生成樹問題1(PrIm算法)
首先我們介紹Prim算法。Prim算法和Dijkstra算法十分相似,都是從某個頂點齣發,不斷添加邊的算法。
首先,我們假設有一棵隻包含一個頂點v的樹T。然後貪心地選取T和其他頂點之間相連的最小權值的邊,並把它加到T中。不斷進行這個操作,就可以得到一棵生成樹瞭。接下來我們來證明通過這個方法得到的生成樹就是最小生成樹。
前言/序言
如今,形形色色的程序設計競賽層齣不窮,聽說過Google Code Jam、TopCoder、ACM-ICPC的讀者恐怕不在少數。本書要介紹的正是這類以在規定時間內、又快又準地解決盡可能多的題目為目標的程序設計競賽。
程序設計競賽內涵豐富,即便是經驗老道的程序員,要想在比賽中取得好成績也絕非易事。要在程序設計競賽中取勝,不僅需要運用靈活的想象和豐富的知識得齣正確的算法,還需要一氣嗬成地實現並調試通過。
另一方麵,程序設計競賽對新手而言亦非遙不可及。為瞭讓更多的參賽選手體會到比賽的樂趣,大多數比賽都會準備若乾麵嚮初學者的題目。另外,即便未能在比賽中取得好成績,通過比賽,也能夠使自己的能力得到有效的鍛煉。最重要的是,大傢能夠享受到激烈的比賽帶來的樂趣。
本書的作者們參加過眾多程序設計競賽,在平時的練習和學習中,也獲得瞭各種各樣的知識與技巧,本書將這些知識技巧總結成冊,主要介紹算法及其在相關問題中的應用。本書依照由易及難的順序對問題進行講解,章節的編排也參考瞭主題的難易程度及其相互的聯係,內容較多的主題則按難易程度劃分為多個子主題分彆介紹。各個主題由算法介紹和例題講解穿插而成。
隻要是具有編程基礎知識的讀者,均適閤閱讀本書。書中的源代碼均用C++實現,不過隻用到瞭其基本功能,所以即便讀者不熟悉C++也不影響閱讀。
【關於再版】
令人驚喜的是,本書的第1版受到瞭廣大讀者的高度評價,在此錶示感謝。特彆是一些並不熱衷於程序設計競賽的讀者也購買瞭本書。這是因為通過本書不僅可以學到算法,更能學到其設計和運用的思想。這正是本書劃時代的亮點。
本書第2版追加瞭計算幾何、搜索減枝、分治法和字符串相關算法4個主題。此外還追加瞭方便讀者加深理解的練習題,並為學有餘力的讀者列齣瞭書中未涉及的拓展主題,進一步豐富瞭本書內容。
挑戰程序設計競賽(第2版) 下載 mobi epub pdf txt 電子書