1. 程式人生 > >串的樸素演算法和KMP模式匹配演算法

串的樸素演算法和KMP模式匹配演算法

串的樸素演算法和KMP模式匹配演算法

 

串的樸素演算法

(BF演算法又稱暴力搜尋):首先待匹配串與模式串首先左對齊,然後從左向右開始逐個進行匹配,如果出現失配情況,則從待匹配串下一個字元開始進行匹配,直到模式串匹配成功。

 

例如:

        待匹配串:a b d a b c a b

        模式串  :a b c

 

 

開始進行匹配:

 

 

 

BF演算法程式碼:

 

 

 

 

 

 

串的KMP模式匹配演算法

核心思想為利用模式串自身的特點,若出現失配情況,則讓模式串返回適當的位置,待匹配串不進行移動,若是一味的讓模式串返回頭部,則很可能會進行很多沒有價值的運算,浪費了之前運算得到的反饋資訊。

 

 

例如:

        待匹配串:a b c a b c a b d a b

        模式串  :a b c a b d

 

此時,我們可以發現,我們從模式串中可以發現,第一位的a肯定不等於第二位的b以及第三位的c,而我們在(1)已經得出了兩者前五位是相等的,所以我們(2)(3)是沒有必有的,肯定不會匹配成功。

這時我們可以讓第六位出現失配情況時,直接讓模式串指向第三位的c和待匹配串的第六位的c進行匹配,成功利用(1)得到的反饋資訊,避免(2)(3)的無效計算。

 

核心思想:模式串返回的適當位置通過呼叫函式輸出為一個數組next。

 

 

KMP演算法程式碼: