在針對串匹配問題中,依次介紹了蠻力、kmp、基於bc表、綜合bc表和gs表等四種演算法,這裡對其複雜度來做乙個總結。
1、在bf演算法中,知道在最好的情況下蠻力演算法的時間複雜度為o(n+m),最壞的情況下時間複雜度為o(n*m),分別如下圖所示兩種情況:
2、在kmp演算法中,知道總體花費的時間為o(n+m)。其中next表的構造花費o(m)的時間。
3、在基於bc表的bm演算法中,最壞的情況下時間複雜度退化和蠻力演算法一樣o(n*m),最好的情況為o(n/m)。對應的最好最壞情況剛好與上圖相反。
對於上面的四種演算法,時間複雜度可以歸納為下圖:
對於串匹配演算法而言,單次比對成功的概率,是決定串匹配演算法時間效率的一項關鍵的因素。若將單次比對的成功率記作pr,則以上演算法的時間效能隨pr的變化趨勢為下圖:
縱座標的三個檔次為:o(n/m)、o(n+m)、o(n*m)。可見對於同一演算法,計算時間與pr具有單調正相關關係,因為隨著單次匹配的成功率的增加,消耗與每乙個對其的位置的平均時間成本會增加。
串匹配演算法
串匹配問題是解決許多應用 文字編輯器,資料庫檢索,c 模板匹配,模式識別等等 的重要技術。這個問題有兩個輸入,第乙個是文字 text 第二個是模式 pattern 目的是要在文字中尋找模式。通常而言文字要遠大於模式。t now is the time for all goodpeopleto com...
KMP模式匹配中匹配的總子串數
類似題目 include include intnext 10001 int len1,len2,total char str 10001 buf 1000001 void get next else j next j 為何遞迴字首索引j next j 就能找到長度更短的相同字首字尾呢?這又歸根到 ...
KMP串匹配演算法
串的模式匹配是串處理系統中的最重要操作之一,普通匹配演算法的時間複雜度為o m n 然而,kmp演算法的演算法時間複雜度為o m n 其主要改進是 當出現比較不等時,不需回溯指標,而是利用已經得到的部分匹配的結果將模式向後滑動盡可能遠的距離。kmp演算法的本質是基於有限自動機理論,它簡化了有限自動機...