摘要:
資料結構
棧,佇列,連結串列
雜湊表,雜湊陣列
堆,優先佇列
...
資料結構 |
棧,佇列,連結串列 |
雜湊表,雜湊陣列 |
堆,優先佇列 |
雙端佇列 |
可並堆 |
左偏堆 |
二叉查詢樹 |
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分數規劃 |
三分法求解單峰(單谷)的極值 |
迭代逼近 |
矩陣法 |