小編在大一的時候,參加了學校中的ACM社團,那時候啥都不知道,對一切都充滿了好奇,不過待了一年半就沒有繼續,原因挺多的,在這一年半中,學了許多聽都沒聽過的算法,也不能說徹底了解,隻能說“愛過”。
通過這一年半ACM,感覺 智商上的差距光靠努力是彌補不回來的,開個玩笑,努力總比不努力強一萬倍。
ACM的确很鍛煉思維,今天就在網上找了一下有關ACM的一些算法,來紀念我這一年半的經曆。
數據結構
-
棧,隊列,鍊表
-
哈希表,哈希數組
-
堆,優先隊列
雙端隊列
可并堆
左偏堆
-
二叉查找樹
Treap
伸展樹
-
并查集
集合計數問題
二分圖的識别
-
平衡二叉樹
-
二叉排序樹
-
線段樹
-
基本圖算法圖
廣度優先遍曆
深度優先遍曆
拓撲排序
割邊割點
強連通分量
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問題
在網上找的,大多都沒見過,有能力的可以學習一下。
,