字串查詢之KMP演算法

2021-08-19 18:38:06 字數 1227 閱讀 7037

首先了解乙個概念:字首和字尾

以dbdcd為例:

字首:d

dbdbd

dbdc

字尾:d

cd           

dcdbdcd

首先在該演算法中具有乙個概念:部分匹配值,部分匹配值為該字串字首與字尾的重合數量,還是以上例子,dbdcd的部分匹配值為1  

我們這裡先知道這個概念,後面會用到。

在abcdabccabcdeeeee中查詢abcde

abcdabccabcdeeee        

步驟一:

abcdabccabcdeeeee    

abcde

首先匹配abcd,但是e不匹配,abcd的部分匹配值為0,向後移(4-0)也就是4位。

移動距離 = 已經匹配的字元數量 - 已經匹配的字串部分匹配值 

步驟二:

abcdabccabcdeeeee    

abcde

此時匹配abc,d無法匹配,根據上述演算法,後移3位

步驟三:

abcdabccabcdeeeee         

abcde

後移

步驟四:

abcdabccabcdeeeee         

abcde

此時完全匹配完成!

總結:在此過程中,計算部分匹配值就是為了避免重複匹配一定匹配不上的字元。

查詢字串之 KMP演算法

bf演算法中 匹配串 a a a a b c c 模式串 a a a a a b c 後移後 a a a a a b c 在位置4匹配失敗,按照bf演算法,下一輪匹配開始,匹配串指標只會向後後偏移一位,kmp 演算法是對bf演算法的改進,通過預處理,來改進每次向後的偏移量.kmp演算法實在有點繞。看...

字串查詢演算法kmp

字串查詢最簡單的方法就是乙個乙個地 滑動 查詢。這樣查詢演算法複雜度可定很高,假設pattern的長度為m,文字txt的長度為n,那麼演算法複雜度為o m n m 1 kmp模式搜尋演算法 kmp knuth morris pratt 我只認識knuth,大名鼎鼎的高納德老頭子嘛。kmp演算法的基本...

字串查詢演算法kmp

給定乙個文字串s,和乙個匹配串p,要求查詢p第一次在s中出現的位置。常見的方法如暴力搜素,逐個匹配s i p j 若匹配,下標後移。不匹配,i回溯到這次匹配前的下一位置,j置為0,重新匹配。最壞情況,時間複雜度o n m int violencesearch char s,char p else i...