㈠ 求kmp演算法的詳細解釋。(最好附上能運行的程序)
t;i),那麼next[i]就是所有這樣的j的最大值
形象地說,就是假如第i 1個字元匹配失敗之後,下一個可能匹配位置至少應該往後挪動多少
就"abaabc"而言
next[1]=0
next[2]=0
next[3]=1
next[4]=1
next[5]=2
next[6]=0
計算過程基本上抄自演算法導論,假設str長度為n
k=0;//k表示當前匹配了多少位
next[1]=0;
for (i=1;in;i )
{
while (k
㈡ 408拓展教材:演算法導論內容推薦
408考試高分指南:《演算法導論》深度解析與推薦
在追求408考試高分的道路上,《演算法導論》無疑是必讀之選。此書不僅提供豐富的數據結構知識,更教人如何思考和解決問題,具備深入理解和掌握數據結構的how、what和why。對於數據結構部分的考點,藉助《演算法導論》能實現深度理解,從而實現滿分的目標。
然而,《演算法導論》的厚度和復雜度使得其作為復習資料略顯不切實際。針對408考試中數據結構部分,本書推薦指數從⭐️到⭐️⭐️⭐️⭐️⭐️,具體如下:
⭐️⭐️⭐️⭐️⭐️:與408考試數據結構考點緊密相關的內容,強烈推薦學習。
⭐️⭐️⭐️⭐️:與408考試數據結構高度相關的章節,推薦深入理解。
其他章節則不推薦過多投入時間,以節省復習時間。
對於時間有限的學生,完整學習此書內容周期約3~6個月,耗時巨大。建議僅針對希望深入理解數據結構底層邏輯的同學,一般情況下,將其視為工具書使用即可。
推薦章節包括但不限於:
第二章:入門,介紹了插入排序與歸並排序。
第三章:描述運行時間,講解了漸近標記,重點掌握大[公式] 漸近標記。
第六章:堆排序,深入理解堆排序的機制。
第七章:快速排序,快速排序演算法的精髓。
第八章:線性時間排序,如基數排序的實現。
第九章:中位數與順序統計量,選擇演算法的實踐。
第十章:基本數據結構,涵蓋了數組、矩陣、棧、隊列、鏈表、樹等。
第十一章:散列表,理解散列表的原理與應用。
第十二章:二叉搜索樹,深入二叉搜索樹的特性。
第十三章:紅黑樹,了解紅黑樹的平衡策略。
第十五章:貪心演算法,學習貪心策略及其應用。
第十八章:B樹,與《數據結構(C語言版)》不同方法的B樹講解。
第十九章:不相交集合的數據結構,即並查集。
第二十章:基本圖演算法,圖的表示、搜索與排序。
第二十一章:最小生成樹,Kruskal演算法與Prim演算法。
第二十二章:單源最短路徑,Dijkstra演算法與關鍵路徑。
第二十三章:全源最短路徑,Floyd演算法。
第三十二章:字元串匹配,KMP演算法,與《數據結構(C語言版)》的差異。
通過以上章節的學習,能全面覆蓋408考試數據結構的考點。本書電子版可從公眾號心源CS獲取,包含不同版本的中文與英文版。
408教輔市場中,《數據結構考研復習指導》由王道論壇主編,內容詳實,基本涵蓋所有考點,是主流選擇。其他教輔質量因人而異,不作評價。
最後,推薦的408數據結構書單如下:
優先順序從上到下遞減,考研復習以教輔為主,其餘書籍可作為工具書輔助學習。
祝大家備考順利,共同努力,一起進步!
㈢ NOIP 如果想得全國一等獎的話需要學習那些知識
必備:【模擬】高精度加、減、乘
【圖論】圖的表示:鄰接矩陣,鄰接表,邊表
傳遞閉包和floyd
最小生成樹演算法(至少會一種)
單源最短路dijkstra(O(n2))或者bellman(spfa優化,O(km))
拓撲排序
【樹】 樹的先序、中序、後序遍歷
樹中的最長路(兩遍bfs或者dfs)
並查集
【搜索】深搜、寬搜
【排序】冒泡排序、快速排序 選擇排序 記數排序(又稱「桶排」)
【動態規劃】
01背包,無限背包
【數論】
最大公約數和最小公倍數,進制轉換
需要:【模擬】
表達式求值(中綴轉後綴,棧的操作)、前綴表達式、中綴表達式、後綴表達式之間的相互轉化
【樹】線段樹 字母樹
【搜索】迭代深搜
【動態規劃】
樹形動態規劃、最長不下降子序列、最長公共子序列和最長公共子串
【排序】歸並排序、堆排序
【串】 KMP(字串匹配)
【數論】 判斷質數(sqrt式與篩法求素數)
【有序表】順序表、鏈表、線段樹及其基本操作
【圖論】
Dijkstra演算法的堆優化、求割點、求割邊、強連通分量、歐拉路(邊一次)、漢密爾頓迴路(點一次)、差分約束系統
【動態規劃】
狀態壓縮的動態規劃
【分治】二分查找、二分答案、最近點對
【樹】 歸並樹(逆序對)
【其他】
Hash、矩形切割(與線段樹的比較)
【數論】歐拉函數
【幾何】線段相交
【有序表】樹狀數組
【樹】 Lca(最近公共祖先)與rmq(區間最值)
【圖論】匹配演算法(最大匹配,最小點覆蓋,最小路徑覆蓋,最大獨立集)
網路流演算法(最大流dinic,最小費用流spfa)
【動態規劃】動態規劃的優化(快速冪,改變狀態,優化轉移,單調性,四邊形不等式)
【串】 Kmp擴展、AC自動機
【數論】 中國剩餘定理、概率與期望
【幾何】 最遠點對(旋轉卡殼) 、凸包(水平序和極角序)
、半平面交
【有序表】平衡樹(sbt、treap、splay)後綴數組
【其他】隨機化演算法、高斯消元
書:演算法導論
《Free Pascal語言與基礎演算法》(第三版)
《全國青少年信息學奧林匹克競賽輔導叢書(中學高級本)》
《青少年信息學奧林匹克競賽實戰輔導叢書》系列(《數學與程序設計》和《數據結構與應用》)
㈣ 請教做ACM的常用演算法..還是菜鳥
初期:
一.基本演算法:
(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{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優二分檢索樹問題)
六.數學
(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)
中級:
一.基本演算法:
(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)
Dp狀態設計與方程總結
1.不完全狀態記錄
<1>青蛙過河問題
<2>利用區間dp
2.背包類問題
<1> 0-1背包,經典問題
<2>無限背包,經典問題
<3>判定性背包問題
<4>帶附屬關系的背包問題
<5> + -1背包問題
<6>雙背包求最優值
<7>構造三角形問題
<8>帶上下界限制的背包問題(012背包)
3.線性的動態規劃問題
<1>積木游戲問題
<2>決斗(判定性問題)
<3>圓的最大多邊形問題
<4>統計單詞個數問題
<5>棋盤分割
<6>日程安排問題
<7>最小逼近問題(求出兩數之比最接近某數/兩數之和等於某數等等)
<8>方塊消除游戲(某區間可以連續消去求最大效益)
<9>資源分配問題
<10>數字三角形問題
<11>漂亮的列印
<12>郵局問題與構造答案
<13>最高積木問題
<14>兩段連續和最大
<15>2次冪和問題
<16>N個數的最大M段子段和
<17>交叉最大數問題
4.判定性問題的dp(如判定整除、判定可達性等)
<1>模K問題的dp
<2>特殊的模K問題,求最大(最小)模K的數
<3>變換數問題
5.單調性優化的動態規劃
<1>1-SUM問題
<2>2-SUM問題
<3>序列劃分問題(單調隊列優化)
6.剖分問題(多邊形剖分/石子合並/圓的剖分/乘積最大)
<1>凸多邊形的三角剖分問題
<2>乘積最大問題
<3>多邊形游戲(多邊形邊上是操作符,頂點有權值)
<4>石子合並(N^3/N^2/NLogN各種優化)
7.貪心的動態規劃
<1>最優裝載問題
<2>部分背包問題
<3>乘船問題
<4>貪心策略
<5>雙機調度問題Johnson演算法
8.狀態dp
<1>牛仔射擊問題(博弈類)
<2>哈密頓路徑的狀態dp
<3>兩支點天平平衡問題
<4>一個有向圖的最接近二部圖
9.樹型dp
<1>完美伺服器問題(每個節點有3種狀態)
<2>小胖守皇宮問題
<3>網路收費問題
<4>樹中漫遊問題
<5>樹上的博弈
<6>樹的最大獨立集問題
<7>樹的最大平衡值問題
<8>構造樹的最小環
㈤ 哪些常見演算法屬於貪婪演算法
顯然KMP和FLOYD演算法不是貪心演算法,FLOYD演算法是使用了類似於動態規劃的思想,而KMP演算法則是對串的前綴進行去處理得到所有可能出現匹配的位置從而減少不必要的位移。貪心演算法可能還有很多,但是一般能用到的可能只有這些。在確定一個問題是否能用貪心來解決的時候應該線能夠證明在這里使用貪心演算法的正確性(詳見演算法導論)