1. 程式人生 > >ACM常用演算法分類

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博弈

•其它博弈