原文 : http://027xbc.blog.163.com/blog/static/128159658201141371343475/ 算法
ACM主要是考算法的,主要時間是花在思考算法上,不是花在寫程序與debug上。數組
下面給個計劃:網絡
第一階段:練經典經常使用算法,下面的每一個算法給我打上十到二十遍,同時本身精簡代碼,
由於太經常使用,因此要練到寫時不用想,10-15分鐘內打完,甚相當掉顯示器均可以把程序打
出來.
1.最短路(Floyd、Dijstra,BellmanFord,spfa)
2.最小生成樹(先寫個prim,kruscal要用並查集,很差寫)
3.大數(高精度)加減乘除
4.二分查找. (代碼可在五行之內)
5.叉乘、判線段相交、而後寫個凸包.
6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡)
7.數學上的有:展轉相除(兩行內),線段交點、多角形面積公式.
8. 調用系統的qsort, 技巧不少,慢慢掌握.
9. 任意進制間的轉換數據結構
第二階段:練習複雜一點,但也較經常使用的算法。
如:
1. 二分圖匹配(匈牙利),最小路徑覆蓋
2. 網絡流,最小費用流。
3. 線段樹.
4. 並查集。
5. 熟悉動態規劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp
6.博弈類算法。博弈樹,二進制法等。
7.最大團,最大獨立集。
8.判斷點在多邊形內。
9. 差分約束系統.
10. 雙向廣度搜索、A*算法,最小耗散優先.閉包
ACMer必備知識(這麼多呀,慢慢學了……)函數
圖論
路徑問題
0/1邊權最短路徑
BFS
非負邊權最短路徑(Dijkstra)
能夠用Dijkstra解決問題的特徵
負邊權最短路徑
Bellman-Ford
Bellman-Ford的Yen-氏優化
差分約束系統
Floyd
廣義路徑問題
傳遞閉包
極小極大距離 / 極大極小距離
Euler Path / Tour
圈套圈算法
混合圖的 Euler Path / Tour
Hamilton Path / Tour
特殊圖的Hamilton Path / Tour 構造
生成樹問題
最小生成樹
第k小生成樹
最優比率生成樹
0/1分數規劃
度限制生成樹
連通性問題
強大的DFS算法
無向圖連通性
割點
割邊
二連通分支
有向圖連通性
強連通分支
2-SAT
最小點基
有向無環圖
拓撲排序
有向無環圖與動態規劃的關係
二分圖匹配問題
通常圖問題與二分圖問題的轉換思路
最大匹配
有向圖的最小路徑覆蓋
0 / 1矩陣的最小覆蓋
完備匹配
最優匹配
穩定婚姻
網絡流問題
網絡流模型的簡單特徵和與線性規劃的關係
最大流最小割定理
最大流問題
有上下界的最大流問題
循環流
最小費用最大流 / 最大費用最大流
弦圖的性質和斷定
組合數學
解決組合數學問題時經常使用的思想
逼近
遞推 / 動態規劃
機率問題
Polya定理
計算幾何 / 解析幾何
計算幾何的核心:叉積 / 面積
解析幾何的主力:複數
基本形
點
直線,線段
多邊形
凸多邊形 / 凸包
凸包算法的引進,捲包裹法
Graham掃描法
水平序的引進,共線凸包的補丁
完美凸包算法
相關斷定
兩直線相交
兩線段相交
點在任意多邊形內的斷定
點在凸多邊形內的斷定
經典問題
最小外接圓
近似O(n)的最小外接圓算法
點集直徑
旋轉卡殼,對踵點
多邊形的三角剖分
數學 / 數論
最大公約數
Euclid算法
擴展的Euclid算法
同餘方程 / 二元一次不定方程
同餘方程組
線性方程組
高斯消元法
解mod 2域上的線性方程組
整係數方程組的精確解法
矩陣
行列式的計算
利用矩陣乘法快速計算遞推關係
分數
分數樹
連分數逼近
數論計算
求N的約數個數
求phi(N)
求約數和
快速數論變換
……
素數問題
機率判素算法
機率因子分解
數據結構
組織結構
二叉堆
左偏樹
二項樹
勝者樹
跳躍表
樣式圖標
斜堆
heap
統計結構
樹狀數組
虛二叉樹
線段樹
矩形面積並
圓形面積並
關係結構
Hash表
並查集
路徑壓縮思想的應用
STL中的數據結構
vector
deque
set / map
動態規劃 / 記憶化搜索
動態規劃和記憶化搜索在思考方式上的區別
最長子序列系列問題
最長不降低子序列
最長公共子序列
最長公共不降低子序列
一類NP問題的動態規劃解法
樹型動態規劃
揹包問題
動態規劃的優化
四邊形不等式
函數的凸凹性
狀態設計
規劃方向
線性規劃
經常使用思想
二分
最小表示法
串
KMP
Trie結構
後綴樹/後綴數組
LCA/RMQ
有限狀態自動機理論
排序
選擇/冒泡
快速排序
堆排序
歸併排序
基數排序
拓撲排序
排序網絡優化