算法分類合集(轉)

ACM 全部算法算法

數據結構
  • 棧,隊列,鏈表
  • 哈希表,哈希數組
  • 堆,優先隊列
    雙端隊列
    可並堆
    左偏堆
  • 二叉查找樹
    Treap
    伸展樹
  • 並查集
    集合計數問題
    二分圖的識別
  • 平衡二叉樹
  • 二叉排序樹
  • 線段樹
    一維線段樹
    二維線段樹
  • 樹狀數組
    一維樹狀數組
    N維樹狀數組
  • 字典樹
  • 後綴數組,後綴樹
  • 塊狀鏈表
  • 哈夫曼樹
  • 桶,跳躍表
  • Trie樹(靜態建樹、動態建樹)
  • AC自動機
  • LCA和RMQ問題
  • KMP算法
圖論
  • 基本圖算法圖
    廣度優先遍歷
    深度優先遍歷
    拓撲排序
    割邊割點
    強連通份量
    Tarjan算法
    雙連通份量
    強連通分支及其縮點
    圖的割邊和割點
    最小割模型、網絡流規約
    2-SAT問題
    歐拉回路
    哈密頓迴路
  • 最小生成樹
    Prim算法
    Kruskal算法(稀疏圖)
    Sollin算法
    次小生成樹
    第k小生成樹
    最優比例生成樹
    最小樹形圖
    最小度限制生成樹
    平面點的歐幾里德最小生成樹
    平面點的曼哈頓最小生成樹
    最小平衡生成樹
  • 最短路徑
    有向無環圖的最短路徑->拓撲排序
    非負權值加權圖的最短路徑->Dijkstra算法(可以使用二叉堆優化)
    含負權值加權圖的最短路徑->Bellmanford算法
    含負權值加權圖的最短路徑->Spfa算法
    (稠密帶負權圖中SPFA的效率並不如Bellman-Ford高)
    全源最短路弗洛伊德算法Floyd
    全源最短路Johnson算法
    次短路徑
    第k短路徑
    差分約束系統
    平面點對的最短路徑(優化)
    雙標準限制最短路徑
  • 最大流
    增廣路->Ford-Fulkerson算法
    預推流
    Dinic算法
    有上下界限制的最大流
    節點有限制的網絡流
    無向圖最小割->Stoer-Wagner算法
    有向圖和無向圖的邊不交路徑
    Ford-Fulkerson迭加算法
    含負費用的最小費用最大流
  • 匹配
    Hungary算法
    最小點覆蓋
    最小路徑覆蓋
    最大獨立集問題
    二分圖最優完備匹配Kuhn-Munkras算法
    不帶權二分匹配:匈牙利算法
    帶權二分匹配:KM算法
    通常圖的最大基數匹配
    通常圖的賦權匹配問題
  • 拓撲排序
  • 弦圖
  • 穩定婚姻問題
搜索
  • 廣搜的狀態優化
    利用M進制數存儲狀態
    轉化爲串用hash表判重
    按位壓縮存儲狀態
    雙向廣搜
    A*算法
  • 深搜的優化
    位運算
    剪枝
    函數參數儘量少
    層數不易過大
    雙向搜索或者是輪換搜索
    IDA*算法
  • 記憶化搜索
動態規劃
  • 四邊形不等式理論
  • 不徹底狀態記錄
    青蛙過河問題
    利用區間dp
  • 揹包類問題
    0-1揹包,經典問題
    無限揹包,經典問題
    斷定性揹包問題
    帶附屬關係的揹包問題
    + -1揹包問題
    雙揹包求最優值
    構造三角形問題
    帶上下界限制的揹包問題(012揹包)
  • 線性的動態規劃問題
    積木遊戲問題
    決鬥(斷定性問題)
    圓的最大多邊形問題
    統計單詞個數問題
    棋盤分割
    日程安排問題
    最小逼近問題(求出兩數之比最接近某數/兩數之和等於某數等等)
    方塊消除遊戲(某區間能夠連續消去求最大效益)
    資源分配問題
    數字三角形問題
    漂亮的打印
    郵局問題與構造答案
    最高積木問題
    兩段連續和最大
    2次冪和問題
    N個數的最大M段子段和
    交叉最大數問題
  • 斷定性問題的dp(如斷定整除、斷定可達性等)
    模K問題的dp
    特殊的模K問題,求最大(最小)模K的數
    變換數問題
  • 單調性優化的動態規劃
    1-SUM問題
    2-SUM問題
    序列劃分問題(單調隊列優化)
  • 剖分問題(多邊形剖分/石子合併/圓的剖分/乘積最大)
    凸多邊形的三角剖分問題
    乘積最大問題
    多邊形遊戲(多邊形邊上是操做符,頂點有權值)
    石子合併(N^3/N^2/NLogN各類優化)
  • 貪心的動態規劃
    最優裝載問題
    部分揹包問題
    乘船問題
    貪心策略
    雙機調度問題Johnson算法
  • 狀態dp
    牛仔射擊問題(博弈類)
    哈密頓路徑的狀態dp
    兩支點天平平衡問題
    一個有向圖的最接近二部圖
  • 樹型dp
    完美服務器問題(每一個節點有3種狀態)
    小胖守皇宮問題
    網絡收費問題
    樹中漫遊問題
    樹上的博弈
    樹的最大獨立集問題
    樹的最大平衡值問題
    構造樹的最小環

數學數組

數論
  • 中國剩餘定理
  • 歐拉函數
  • 歐幾里得定理
  • 歐幾里德展轉相除法求GCD(最大公約數)
  • 擴展歐幾里得
  • 大數分解與素數斷定
  • 佩爾方程
  • 同餘定理(大數求餘)
  • 素數測試
    一千萬之內:篩選法
    一千萬之外:米勒測試法
  • 連分數逼近
  • 因式分解
  • 循環羣生成元
  • 素數與整除問題
  • 進制位.
  • 同餘模運算
組合數學
  • 排列組合
  • 容斥原理
  • 遞推關係和生成函數
  • Polya計數法
    Polya計數公式
    Burnside定理
  • N皇后構造解
  • 幻方的構造
  • 知足必定條件的hamilton圈的構造
  • Catalan數
  • Stirling數
  • 斐波拉契數
  • 調和數
  • 連分數
  • MoBius反演
  • 偏序關係理論
  • 加法原理和乘法原理
計算幾何
  • 基本公式
    叉乘
    點乘
    常見形狀的面積、周長、體積公式
    座標離散化
  • 線段
    判斷兩線段(一直線、一線段)是否相交
    求兩線段的交點
  • 多邊形
    斷定凸多邊形,頂點按順時針或逆時針給出,(不)容許相鄰邊共線
    判點在凸多邊形內或多邊形邊上,頂點按順時針或逆時針給出
    判點在凸多邊形內,頂點按順時針或逆時針給出,在多邊形邊上返回0
    判點在任意多邊形內,頂點按順時針或逆時針給出
    判線段在任意多邊形內,頂點按順時針或逆時針給出,與邊界相交返回1
    多邊形重心
    多邊形切割(半平面交)
    掃描線算法
    多邊形的內核
  • 三角形
    心裏
    外心
    重心
    垂心
    費馬點

  • 判直線和圓相交,包括相切
    判線段和圓相交,包括端點和相切
    判圓和圓相交,包括相切
    計算圓上到點p最近點,如p與圓心重合,返回p自己
    計算直線與圓的交點,保證直線與圓有交點
    計算線段與圓的交點可用這個函數後判點是否在線段上
    計算圓與圓的交點,保證圓與圓有交點,圓心不重合
    計算兩圓的內外公切線
    計算線段到圓的切點
    點集最小圓覆蓋
  • 可視圖的創建
  • 對踵點
  • 經典問題
    平面凸包
    三維凸包
    Delaunay剖分/Voronoi圖
計算方法
  • 二分法
    二分法求解單調函數相關知識
    用矩陣加速的計算
  • 迭代法
  • 三分法
  • 解線性方程組
    LUP分解
    高斯消元
  • 解模線性方程組
  • 定積分計算
  • 多項式求根
  • 週期性方程
  • 線性規劃
  • 快速傅立葉變換
  • 隨機算法
  • 0/1分數規劃
  • 三分法求解單峯(單谷)的極值
  • 迭代逼近
  • 矩陣法
博弈論
  • 極大極小過程
  • Nim問題
 
必要的知識儲備

* 高等數學, 離散數學。
*一些基本算法和數據結構
(隊列、棧、樹、圖、並查集、堆、 DFSBFS、最短路、最小生成樹、
拓撲排序、動態規劃、貪心、搜索、 KMP、哈希、 TrieAC 自動機、快速冪、逆元、費馬小
定理、歐拉函數、素數篩選、分解質因數)
//通常這個過程須要很長的時間,推薦 Vjudge 上的 kuangbin 帶你飛專題。
*一些進階的算法以及複雜一些的數據結構(樹狀數組 線段樹 平衡樹 後綴數組 二分圖匹
配 網絡流 費用流 割點 橋 強聯通 雙聯通 最近公共祖先 四大 DP(數位 dp 區間 dp 狀壓
dp 機率 dp) 博弈論 SG 函數 )

1.1 基本數據結構服務器

1. 數組網絡

2. 鏈表,雙向鏈表數據結構

3. 隊列,單調隊列,雙端隊列ide

4. 棧,單調棧函數

1.2 中級數據結構工具

1. 堆post

2. 並查集與帶權並查集測試

3. hash 表

    天然溢出

    雙hash

1.3 高級數據結構

1. 樹狀數組

2. 線段樹,線段樹合併

3. 平衡樹

    Treap 隨機平衡二叉樹

    Splay 伸展樹

    * Scapegoat Tree 替罪羊樹

4. 塊狀數組,塊狀鏈表

5.* 樹套樹

    線段樹套線段樹

    線段樹套平衡樹

    * 平衡樹套線段樹

6.可並堆

    左偏樹

    *配對堆

7. *KDtree,*四分樹

1.4 可持久化數據結構

1. 可持久化線段樹

    主席樹

2. * 可持久化平衡樹

3. * 可持久化塊狀數組

1.5 字符串相關算法及數據結構

1. KMP

2. AC 自動機

3. 後綴數組

4. *後綴樹

5. *後綴自動機

6. 字典樹 Trie

7. manacher

1.6 圖論相關

1. 最小生成樹

    prim

    kruskal

2. 最短路,次短路,K短路

    spfa

    dijkstra

    floyd

3. 圖的連通

    連通份量

    割點,割邊

4. 網絡流

    最大流

    最小割

    費用流

    分數規劃

5. 樹相關

    樹上倍增,公共祖先

    樹鏈剖分

    樹的分治算法(點分治,邊分治,*動態?樹分治)

    動態樹 (LCT,*樹分塊)

    虛樹

    *prufer編碼

7. 拓撲排序

8. 歐拉圖

9. 二分圖

    *KM算法

    匈牙利算法

1.7 數學相關

1. (擴展)歐幾里得算法,篩法,快速冪

    斐蜀定理

    更相減損術

2. 歐拉函數與*降冪大法

3. 費馬小定理

4. 排列組合

    lucas定理

5. 乘法逆元

6. 矩陣乘法

7. 數學指望與機率

8. 博弈論

    sg函數

    樹上刪邊遊戲

9. *拉格朗日乘子法

10. 中國剩餘定理

11. 線性規劃與網絡流

12. 單純型線性規劃

13. 辛普森積分

14. 模線性方程組

15. 容斥原理與莫比烏斯反演

16. 置換羣

17. 快速傅里葉變換

18. *大步小步法(BSGS),擴展BSGS

1.8 動態規劃

1. 通常,揹包,狀壓,區間,環形,樹形,數位動態規劃

    記憶化搜索

    斯坦納樹

    揹包九講

2. 斜率優化與* 四邊形不等式優化

3. 環 + 外向樹上的動態規劃

4. *插頭動態規劃

1.9 計算幾何

1. 計算幾何基礎

2. 三維計算幾何初步

3. *梯形剖分與*三角形剖分

4. 旋轉卡殼

5. 半平面交

6. pick定理

7. 掃描線

1.10 搜索相關

1. bfs,dfs

2. A* 算法

3. 迭代加深搜索,雙向廣搜

1.11 特殊算法

1. 莫隊算法,*樹上莫隊

2. 模擬退火

3. 登山算法

4. 隨機增量法

1.12 其它重要工具與方法

1.模擬與貪心

2. 二分,三分法(求偏導)

3. 分治,CDQ分治

4. 高精度

5. 離線

6. ST表

1.13 STL

1. map

2. priority_queue

3. set

4. bitset

5. rope

1.14 很是見算法

1. *朱劉算法

2. *弦圖與區間圖



1、數學問題 ( 0/ 9 )

一、素數判斷

二、分解質因數

三、歐幾里德算法、擴展歐幾里德算法、解同餘方程

四、快速冪及相關模運算

五、進制轉換

六、排列組合

七、高精度運算:加、減、乘、除(高精度除以單精度、高精度除以高精度)

八、歐拉函數

九、高斯消元

2、字符串(0/5)

一、KMP

二、字典樹(Trie樹 )

三、最長公共字串

四、最長迴文字串(Manacher算法)

五、AC自動機

3、搜索專題(0/4)

一、深度優先搜索(DFS/回溯法)

二、廣度優先搜索(BFS)

三、Dancing Links

四、搜索優化方法

4、DP專題(0/11)

一、揹包問題:0/1揹包、徹底揹包

二、記憶化搜索

三、最長公共子系列(LCS)

四、最長不降低序列,O(N2)算法和優化後的O(NlogN)算法。

五、最大字段和

六、數位DP

七、樹型DP

八、雙路DP

九、區間DP

十、狀態壓縮

十一、單調性優化

5、數據結構(0/7)

一、棧、隊列的遠離和應用

二、哈希表

三、並查集

四、二叉堆(手寫、STL優先隊列都須要掌握)

五、最近公共祖先(LCA)

六、樹狀數組

七、線段樹

6、圖論(0/5)

一、最短路徑(SPFA、Dijkstra等)及其使用範圍

二、差分約束系統

三、最小生成樹

四、拓撲排序

五、連通性判斷:DFS、弗洛伊德、Tarjan算法及應用

7、其它(0/6)

一、快速排序(sort):數值排序、字符串排序(string類型)、多關鍵字排序

二、二分答案

三、三分答案

四、求逆序對

五、離散化思想

六、倍增思想

相關文章
相關標籤/搜索