傳統匹配
有s和t,2個串,s是待匹配的串,t是匹配串,(點就是他們的小標序列–自定義的)
他們在匹配的時候,是逐一匹配,假如在第一次匹配的第5個點碰到不相同的內容,這個時候會發生,s回溯到第一次匹配開始點的下乙個點,t會回溯到開始點
效能:
會帶來多次重複的匹配,非常消耗效能,時間複雜度遠遠大於kmp匹配
kmp匹配
首先有乙個 s串=」abababcabababa」
然後我們定義乙個要匹配的模式串t=」abababa」,
在kmp演算法中最重要的就是next函式,他的作用就是減少重複匹配的次數
1.next函式如何求值
首先我們要清楚 「abababa」中有幾個候選串,如何求候選串呢
a b a b a b a
i 0 1 2 3 4 5 6
t1=??(n=0~k)
t2=??(n=i-k~i)
k不能大於i
當t1=t2
這個時候就可以知道其中乙個候選串
重點 1:我們要求出所有的候選串,並取出最長結果的串最為next函式的值
然後我們把i=0,1,2,3,4,5,6的next函式值求出來
當i=0的時候,next函式值為-1,這個是特殊情況
重點,我們就可以根據不用每次都把t回溯到開始點位置,直接回溯到t的next值得下標點進行再次匹配
好處:充分利用已經計算過的結果,減少重複計算
KMP串匹配演算法
串的模式匹配是串處理系統中的最重要操作之一,普通匹配演算法的時間複雜度為o m n 然而,kmp演算法的演算法時間複雜度為o m n 其主要改進是 當出現比較不等時,不需回溯指標,而是利用已經得到的部分匹配的結果將模式向後滑動盡可能遠的距離。kmp演算法的本質是基於有限自動機理論,它簡化了有限自動機...
BF演算法與KMP演算法 字串匹配演算法
bf演算法,簡稱暴力破解 bruce force 又稱樸素模式的匹配演算法。可以看出bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和t的第二個字元 若不相等,則比較s的第二個字元和t的第乙個字元,依次比較,直到得出最後的匹配結果。這種演算法...
字串匹配與KMP演算法
參考 j.boxer s blog the knuth morris pratt algorithm in my own words.在電腦科學中,knuth morris pratt字串查詢演算法 簡稱為kmp演算法 可在乙個主文字字串 s 內查詢乙個詞 w 的出現位置。此演算法通過運用對這個詞在...