首先了解乙個概念:字首和字尾
以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...