1. 數據結構——圖graph(基礎概念)
【各種東拼西湊來的】
圖(Graph)是由頂點和連接頂點的邊構成的離散結構。在計算機科學中,圖是最靈活的數據結構之一,很多問題都可以使用圖模型進行建模求解。例如:生態環境中不同物種的相互競爭、人與人之間的社交與關系網路、化學上用圖區分結構不同但分子式相同的同分異構體、分析計算機網路的拓撲結構確定兩台計算機是否可以通信、找到兩個城市之間的最短路徑等等。
圖的結構很簡單,就是由頂點$V$集和邊$E$集構成,因此圖可以表示成$G=(V, E)$。
注意: 頂點有時也稱為節點或者交點,邊有時也稱為鏈接。
無向圖
我們可以說這張圖中,有點集$V=\{1, 2, 3, 4, 5, 6\}$,邊集$E=\{(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)\}$。在無向圖中,邊$(u, v)$和邊$(v, u)$是一樣的,因此只要記錄一個就行了。簡而言之,對稱。
有向圖
也很好理解,就是加上了方向性,頂點$(u, v)$之間的關系和頂點$(v,u)$之間的關系不同,後者或許不存在。例如,地圖應用中必須存儲單行道的信息,避免給出錯誤的方向。
加權圖 :
權:與圖的邊或弧相關的數叫做權。
與加權圖對應的就是無權圖,或叫等權圖。如果一張圖不含權重信息,我們就認為邊與邊之間沒有差別。不過,具體建模的時候,很多時候都需要有權重,比如對中國重要城市間道路聯系的建模,總不能認為從北京去上海和從北京去廣州一樣遠(等權)。
還有很多細化的概念,比如:無向圖中,任意兩個頂點間都有邊,稱為 無向完全圖 ;加權圖起一個新名字,叫 網(network) ……然而,如無必要,毋增實體。
鄰接(adjacency) :鄰接是 兩個頂點之間 的一種關系。如果圖包含$(u,v)$,則稱頂點$v$與頂點$u$鄰接。當然,在無向圖中,這也意味著頂點$u$與頂點$v$鄰接。
關聯(incidence) :關聯是 邊和頂點之間 的關系。在有向圖中,邊$(u,v)$從頂點$u$開始關聯到$v$,或者相反,從$v$關聯到$u$。注意,有向圖中,邊不一定是對稱的,有去無回是完全有可能的。細化這個概念,就有了頂點的 入度(in-degree) 和 出度(out-degree) 。無向圖中,頂點的度就是與頂點相關聯的邊的數目,沒有入度和出度。在有向圖中,我們以圖1-2為例,頂點10有2個入度,$3\rightarrow10$,$11\rightarrow10$,但是沒有從10指向其它頂點的邊,因此頂點10的出度為0。
路徑(path) :依次遍歷頂點序列之間的邊所形成的軌跡。注意,依次就意味著有序,先1後2和先2後1不一樣。
簡單路徑 : 沒有重復頂點的路徑稱為簡單路徑。說白了,這一趟路里沒有出現繞了一圈回到同一點的情況,也就是沒有 環 。
環/迴路 :包含相同的頂點兩次或者兩次以上。圖1-3中的頂點序列$<1,2,4,3,1>$,1出現了兩次,當然還有其它的環,比如$<1,4,3,1>$。
簡單迴路/簡單環: 除了第一個頂點和最後一個頂點之外,其餘頂點不重復出現的迴路
無環圖 :沒有環的圖,其中, 有向無環圖 有特殊的名稱,叫做 DAG(Directed Acyline Graph) (最好記住,DAG具有一些很好性質,比如很多動態規劃的問題都可以轉化成DAG中的最長路徑、最短路徑或者路徑計數的問題)。
兩個連通分支:
連通的 :無向圖中每一對不同的頂點之間都有路徑。如果這個條件在有向圖里也成立,那麼就是 強連通 的。
連通分量 :無向圖中的極大連通子圖。
兩點強連通:在有向圖G中,如果兩點互相可達
強連通圖: 如果有向圖G的每兩個頂點都強連通(任意兩點互相可達),稱G是一個 強連通圖 。
強連通分量: 非強連通有向圖的極大強連通子圖,稱為強連通 分量 (strongly connected components)。
關節點(割點) :某些特定的頂點對於保持圖或連通分支的連通性有特殊的重要意義。如果 移除某個頂點 將使圖或者分支 失去連通性 ,則稱該頂點為 關節點 。(在某圖中,若刪除頂點V以及V相關的邊後,圖的一個連通分量分割為兩個或兩個以上的連通分量,則稱頂點V為該圖的一個關節點)。
橋(割邊) :和關節點類似,刪除一條邊,就產生比原圖更多的連通分支的子圖,這條邊就稱為 割邊 或者 橋 。
雙連通圖 :在無向連通圖中,如果刪除該圖的任何一個結點都不能改變該圖的連通性,則該圖為雙連通的無向圖。個人理解就是一個雙連通圖沒有割點,沒有橋的圖。
1.2 一些有趣的圖概念
這一部分屬於圖論的內容,基礎圖演算法不會用到,但是我覺得挺有意思的,小記如下。【這部分我沒看,照搬過來了】
同構 4 :圖看起來結構不一樣,但它是一樣的。假定有$G_1$和$G_2$,那麼你只要確認對於$G_1$中的所有的兩個 相鄰點 $a$和$b$,可以通過某種方式$f$映射到$G_2$,映射後的兩個點$f(a)$、$f(b)$也是相鄰的。換句話說,當兩個簡單圖同構時,兩個圖的頂點之間保持相鄰關系的一一對應。
圖1-7就展示了圖的同構,這里頂點個數很少判斷圖的同構很簡單。我們可以把v1看成u1,自然我們會把u3看出v3。用數學的語言就是$f(u_1)=v_1$,$f(u_3)=v_3$。u1的另外一個連接是到u2,v1的另外一個連接是到v4,不難從相鄰頂點的關系驗證$f(u_2)=v_4$,$f(u_4)=v_2$。
歐拉迴路(Euler Circuit) :小學數學課本上的哥尼斯堡七橋問題,能不能從鎮里的某個位置出發 不重復的經過所有橋(邊)並且返回出發點 。這也就小學的一筆畫問題,歐拉大神解決里這個問題,開創了圖論。結論很簡單:至少2個頂點的連通多重圖存在歐拉迴路的充要條件是 每個頂點的度都是偶數 。證明也很容易,大家有興趣可以閱讀相關資料。結論也很好理解,從某個起點出發,最後要回起點,中間無論路過多少次起點,都會再次離開,進、出的數目必然相等,故一定是偶數。
哈密頓迴路(Hamilton Circuit) :哈密頓迴路條件就比歐拉迴路嚴格一點, 不能重復經過點 。你可能會感到意外,對於歐拉迴路,我們可以輕而易舉地回答,但是 我們卻很難解決哈密頓迴路問題,實際上它是一個NP完全問題 。這個術語源自1857年愛爾蘭數學家威廉·羅萬·哈密頓爵士發明的智力題。哈密頓的智力題用到了木質十二面體(如圖1-8(a)所示,十二面體有12個正五邊形表面)、十二面體每個頂點上的釘子、以及細線。十二面體的20個頂點用世界上的不同城市標記。智力題要求從一個城市開始,沿十二面體的邊旅行,訪問其他19個城市,每個恰好一次,最終回到第一個城市。
因為作者不可能向每位讀者提供帶釘子和細線的木質十二面體,所以考慮了一個 等價的問題 :對圖1-8(b)的圖是否具有恰好經過每個頂點一次的迴路?它就是對原題的解,因為這個平面圖 同構 於十二面體頂點和邊。
著名的 旅行商問題(TSP) 要求旅行商訪問一組城市所應當選取的最短路線。這個問題可以歸結為求完全圖的哈密頓迴路,使這個迴路的邊的權重和盡可能的小。同樣,因為這是個NP完全問題,最直截了當的方法就檢查所有可能的哈密頓迴路,然後選擇權重和最小的。當然這樣效率幾乎難以忍受,時間復雜度高達$O(n!)$。在實際應用中,我們使用的啟發式搜索等 近似演算法 ,可以完全求解城市數量上萬的實例,並且甚至能在誤差1%范圍內估計上百萬個城市的問題。
關於旅行商問題目前的研究進展,可以到 http://www.math.uwaterloo.ca/... 。
1.3 小結
以為可以一帶而過,結果寫了那麼多。也沒什麼好總結的了,當然這些也至是圖論概念的一小部分,還有一些圖可能我們以後也會見到,比如順著圖到網路流,就會涉及二分圖,不過都很好理解,畢竟有圖。
1、數組(鄰接矩陣)
2、鄰接表
3、十字鏈表
4、鄰接多種表
2. 西南交大acm動態規劃問題有哪些
ACM常用演算法及練習
第一階段:練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡代碼,
因為太常用,所以要練到寫時不用想,10-15分鍾內打完,甚至關掉顯示器都可以把程序打
出來.
1.最短路(Floyd、Dijstra,BellmanFord)
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*演算法,最小耗散優先.
相關的知識
圖論
路徑問題
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)
求約數和
快速數論變換
……
素數問題
概率判素演算法
概率因子分解
數據結構
組織結構
二叉堆
左偏樹
二項樹
勝者樹
跳躍表
樣式圖標
斜堆
reap
統計結構
樹狀數組
虛二叉樹
線段樹
矩形面積並
圓形面積並
關系結構
Hash表
並查集
路徑壓縮思想的應用
STL中的數據結構
vector
deque
set / map
動態規劃 / 記憶化搜索
動態規劃和記憶化搜索在思考方式上的區別
最長子序列系列問題
最長不下降子序列
最長公共子序列
最長公共不下降子序列
一類NP問題的動態規劃解法
樹型動態規劃
背包問題
動態規劃的優化
四邊形不等式
函數的凸凹性
狀態設計
規劃方向
線性規劃
常用思想
二分 最小表示法
串
KMP Trie結構
後綴樹/後綴數組 LCA/RMQ
有限狀態自動機理論
排序
選擇/冒泡 快速排序 堆排序 歸並排序
基數排序 拓撲排序 排序網路
中級:
一.基本演算法:
(1)C++的標准模版庫的應用. (poj3096,poj3007)
(2)較為復雜的模擬題的訓練(poj3393,poj1472,poj3371,poj1027,poj2706)
二.圖演算法:
(1)差分約束系統的建立和求解. (poj1201,poj2983)
(2)最小費用最大流(poj2516,poj2516,poj2195)
(3)雙連通分量(poj2942)
(4)強連通分支及其縮點.(poj2186)
(5)圖的割邊和割點(poj3352)
(6)最小割模型、網路流規約(poj3308, )
三.數據結構.
(1)線段樹. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)靜態二叉檢索樹. (poj2482,poj2352)
(3)樹狀樹組(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)並查集的高級應用. (poj1703,2492)
(6)KMP演算法. (poj1961,poj2406)
四.搜索
(1)最優化剪枝和可行性剪枝
(2)搜索的技巧和優化 (poj3411,poj1724)
(3)記憶化搜索(poj3373,poj1691)
五.動態規劃
(1)較為復雜的動態規劃(如動態規劃解特別的施行商問題等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)記錄狀態的動態規劃. (POJ3254,poj2411,poj1185)
(3)樹型動態規劃(poj2057,poj1947,poj2486,poj3140)
六.數學
(1)組合數學:
1.容斥原理.
2.抽屜原理.
3.置換群與Polya定理(poj1286,poj2409,poj3270,poj1026).
4.遞推關系和母函數.
(2)數學.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率問題. (poj3071,poj3440)
3.GCD、擴展的歐幾里德(中國剩餘定理) (poj3101)
(3)計算方法.
1.0/1分數規劃. (poj2976)
2.三分法求解單峰(單谷)的極值.
3.矩陣法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)隨機化演算法(poj3318,poj2454)
(5)雜題.
(poj1870,poj3296,poj3286,poj1095)
七.計算幾何學.
(1)坐標離散化.
(2)掃描線演算法(例如求矩形的面積和周長並,常和線段樹或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多邊形的內核(半平面交)(poj3130,poj3335)
(4)幾何工具的綜合應用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高級:
一.基本演算法要求:
(1)代碼快速寫成,精簡但不失風格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保證正確性和高效性. poj3434
二.圖演算法:
(1)度限制最小生成樹和第K最短路. (poj1639)
(2)最短路,最小生成樹,二分圖,最大流問題的相關理論(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最優比率生成樹. (poj2728)
(4)最小樹形圖(poj3164)
(5)次小生成樹.
(6)無向圖、有向圖的最小環
三.數據結構.
(1)trie圖的建立和應用. (poj2778)
(2)LCA和RMQ問題(LCA(最近公共祖先問題) 有離線演算法(並查集+dfs) 和 在線演算法
(RMQ+dfs)).(poj1330)
(3)雙端隊列和它的應用(維護一個單調的隊列,常常在動態規劃中起到優化狀態轉移的
目的). (poj2823)
(4)左偏樹(可合並堆).
(5)後綴樹(非常有用的數據結構,也是賽區考題的熱點).
(poj3415,poj3294)
四.搜索
(1)較麻煩的搜索題目訓練(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)廣搜的狀態優化:利用M進制數存儲狀態、轉化為串用hash表判重、按位壓縮存儲狀態、雙向廣搜、A*演算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的優化:盡量用位運算、一定要加剪枝、函數參數盡可能少、層數不易過大、可以考慮雙向搜索或者是輪換搜索、IDA*演算法. (poj3131,poj2870,poj2286)
五.動態規劃
(1)需要用數據結構優化的動態規劃.
(poj2754,poj3378,poj3017)
(2)四邊形不等式理論.
(3)較難的狀態DP(poj3133)
六.數學
(1)組合數學.
1.MoBius反演(poj2888,poj2154)
2.偏序關系理論.
(2)博奕論.
1.極大極小過程(poj3317,poj1085)
2.Nim問題.
七.計算幾何學.
(1)半平面求交(poj3384,poj2540)
(2)可視圖的建立(poj2966)
(3)點集最小圓覆蓋.
(4)對踵點(poj2079)
八.綜合題.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
初期:
一.基本演算法:
(1)枚舉. (poj1753,poj2965) (2)貪心(poj1328,poj2109,poj2586)
(3)遞歸和分治法. (4)遞推.
(5)構造法.(poj3295) (6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.圖演算法:
(1)圖的深度優先遍歷和廣度優先遍歷.
(2)最短路徑演算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成樹演算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓撲排序 (poj1094)
(5)二分圖的最大匹配 (匈牙利演算法) (poj3041,poj3020)
(6)最大流的增廣路演算法(KM演算法). (poj1459,poj3436)
三.數據結構.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、歸並排(與逆序數有關)、堆排) (poj2388,poj2299)
(3)簡單並查集的應用.
(4)哈希表和二分查找等高效查找法(數的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼樹(poj3253)
(6)堆
(7)trie樹(靜態建樹、動態建樹) (poj2513)
四.簡單搜索
(1)深度優先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)廣度優先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)簡單搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.動態規劃
(1)背包問題. (poj1837,poj1276)
(2)型如下表的簡單DP(可參考lrj的書 page149):
1.E[j]=opt (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt.(最優二分檢索樹問題)
六.數學
(1)組合數學:
1.加法原理和乘法原理.
2.排列組合.
3.遞推關系.
(POJ3252,poj1850,poj1019,poj1942)
(2)數論.
1.素數與整除問題
2.進制位.
3.同餘模運算.
(poj2635, poj3292,poj1845,poj2115)
(3)計算方法.
1.二分法求解單調函數相關知識.(poj3273,poj3258,poj1905,poj3122)
七.計算幾何學.
(1)幾何公式.
(2)叉積和點積的運用(如線段相交的判定,點到線段的距離等). (poj2031,poj1039)
(3)多邊型的簡單演算法(求面積)和相關判定(點在多邊型內,多邊型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)
3. 《啊哈!演算法》epub下載在線閱讀,求百度網盤雲資源
《啊哈!演算法》(啊哈磊)電子書網盤下載免費在線閱讀
鏈接:https://pan..com/s/1xarObhZx2nYXRl2R5Tc0Ig
書名:啊哈!演算法
作者:啊哈磊
豆瓣評分:7.7
出版社:人民郵電出版社
出版年份:2014-6-1
頁數:246
內容簡介:
這不過是一本有趣的演算法書而已。和別的演算法書比較,如果硬要說它有什麼特點的話,那就是你能看懂它。
這是一本充滿智慧和趣味的演算法入門書。沒有枯燥的描述,沒有難懂的公式,一切以實際應用為出發點,
通過幽默的語言配以可愛的插圖來講解演算法。你更像是在閱讀一個個輕松的小故事或是在玩一把趣味解謎
游戲,在輕松愉悅中便掌握演算法精髓,感受演算法之美。
本書中涉及到的數據結構有棧、隊列、鏈表、樹、並查集、堆和圖等;涉及到的演算法有排序、枚舉、
深度和廣度優先搜索、圖的遍歷,當然還有圖論中不可以缺少的四種最短路徑演算法、兩種最小生成樹演算法、
割點與割邊演算法、二分圖的最大匹配演算法等。
網名啊哈磊。
曾在中科院玩過單片機。武漢大學歷史上第一位以本科生身份加入MSRA(微軟亞洲研究院)的小夥伴,在機器學習組從事搜索引擎方面的研究。
發表國際會議論文一篇(IEEE)。
全國青少年信息學奧林匹克金牌教練。
超萌超簡潔的C語言編譯器——「啊哈C編譯器」作者。
2013年我的著作,有趣的編程科普書《啊哈C!》出版。
網址:www.ahalei.com
微博:weibo.com/ahalei
非常喜歡小朋友,每天都過得都非常開心。
至於為什麼叫「啊哈磊」,因為我覺得這是一個很喜慶的名字。
作者簡介:
網名啊哈磊。
曾在中科院玩過單片機。武漢大學歷史上第一位以本科生身份加入MSRA(微軟亞洲研究院)的小夥伴,在機器學習組從事搜索引擎方面的研究。
發表國際會議論文一篇(IEEE)。
全國青少年信息學奧林匹克金牌教練。
超萌超簡潔的C語言編譯器——「啊哈C編譯器」作者。
2013年我的著作,有趣的編程科普書《啊哈C!》出版。
4. 圖論割集問題
回答樓主,圖論大多問題的解決,需要用到遍歷演算法,判斷割集我想不會有其它演算法,遍歷的演算法目前是圖論中最基本最重要的演算法,當然對一些特殊的圖可能會有其它方法.遍歷演算法的計算復雜度不是很大的,是多項式演算法,在計算機上可以實現.當然在選取邊和點時應考慮技巧性,這恐怕是個難題,否則會出現組合爆炸,就象貨郎擔問題一樣,比如選擇點可以首先考慮選取度數最大的點,選取邊一定要選不在迴路上的邊.這需要你的智慧.
割集分為點割集和邊割集,對一個圖G=(V,E)來說如果存在一個結點集V的子集,從G中刪除這些結點後,它的連通分圖的個數增多,則稱該子集為點割集,對一個連通圖來說,刪除這些結點後,連通圖變為不連通.點割集一般不是唯一的,含有最小結點個數的點割集稱為最小點割集,類似可定義邊割集和最小邊割集,僅含1個點的點割集稱為割點,僅含1個邊的邊割集稱為割邊,割邊也稱為橋.
求一個連通簡單圖的割集的演算法,我想可用遍歷的演算法,目前常用的是深度優先搜索或者廣度優先搜索演算法來做,這是圖論中最基本的演算法,這種演算法可求出圖的連通分圖的個數,以此來判斷某子集是否是割集.
5. 計算機演算法的演算法與程序
雖然演算法與計算機程序密切相關,但二者也存在區別:計算機程序是演算法的一個實例,是將演算法通過某種計算機語言表達出來的具體形式;同一個演算法可以用任何一種計算機語言來表達。
演算法列表
圖論
路徑問題
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)
求約數和
快速數論變換
……
素數問題
概率判素演算法
概率因子分解
數據結構
組織結構
二叉堆
左偏樹
二項樹
勝者樹
跳躍表
樣式圖標
斜堆
reap
統計結構
樹狀數組
虛二叉樹
線段樹
矩形面積並
圓形面積並
關系結構
Hash表
並查集
路徑壓縮思想的應用
STL中的數據結構
vector
deque
set / map
動態規劃/記憶化搜索
動態規劃和記憶化搜索在思考方式上的區別
最長子序列系列問題
最長不下降子序列
最長公共子序列
一類NP問題的動態規劃解法
樹型動態規劃
背包問題
動態規劃的優化
四邊形不等式
函數的凸凹性
狀態設計
規劃方向
線性規劃
常用思想
二分
最小表示法
串
KMP
Trie結構
後綴樹/後綴數組
LCA/RMQ
有限狀態自動機理論
排序
選擇/冒泡
快速排序
堆排序
歸並排序
基數排序
拓撲排序
排序網路