串的樸素演算法和KMP模式匹配演算法
阿新 • • 發佈:2018-11-14
串的樸素演算法和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演算法程式碼: