演算法模板 KMP演算法

2021-10-11 03:58:57 字數 852 閱讀 1715

kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt提出的,因此人們稱它為克努特—莫里斯—普拉特操作(簡稱kmp演算法)。kmp演算法的核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next()函式實現,函式本身包含了模式串的區域性匹配資訊。kmp演算法的時間複雜度o(m+n)

全有注釋,別問,問就是模板,具體看演算法導論第32章

#include

#include

#include

#include

using

namespace std;

const

int n =

1000000+5

;char t[n]

, p[n]

;//t 模板字串 p 模式字串

int net[n]

;//net[i]包含第i個字元的與真字尾相等的最長字首長度

void

tonext

(char

*p)}

void

kmp(

char

*t,char

*p)}

for(

int i =

1; i <= plen; i ++

)printf

("%d "

, net[i]);

//輸出π(i) 包含第i個字母的最長字首長度

printf

("\n");

}int

main()

蒟蒻的模板咕咕咕

演算法模板 KMP演算法

kmp演算法 由d.e.knuth,j.h.morris和v.r.pratt提出的,串匹配演算法,一般串都是指字串。kmp是基於雙指標演算法的 應用 乙個字串在另外乙個字串 現的位置和迴圈節 一般地,被匹配的字串叫主串,用來匹配主串的叫模式串 如果我們不用kmp,來查詢乙個字串在另外乙個字串中第一次...

KMP演算法(模板)

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1 長度小於1000000 第二行代表string2 長...

KMP演算法模板

在文字t 1.n 中找到某個模式p 1.m 所有出現的位置被稱作字串匹配問題 m n p3375 模板 kmp字串匹配 這道題在洛谷上的評級居然是普及 普及?qvq 實現起來還是比較簡單的,只不過有很多細節可以有很多種寫法,看別人的 容易凌亂。理解起來比較困難的部分是如何get next 不建議初學...