字串匹配演算法之BF vs KMP

2021-06-22 23:50:09 字數 795 閱讀 2496

最笨的方法bf,暴力匹配,無需多說,

最難理解的是kmp演算法,費了好大勁才弄明白。

要理解kmp演算法,其實最關鍵的是生成標明下次匹配位置的next陣列。其意義是,如果當前匹配到模式字串的第j個字元是失配,則只需要將j重置為next[j]後,繼續向後匹配即可。

next[j]的值表示p[0...j-1]中最長字尾的長度等於相同字串行的字首, 假設next[j]=k, 即p[0...k-1]==p[j-k,j-1]

參考:下面是幾處關鍵**的說明:

92.next_value

[index]=

j;//模式字串從頭自匹配到此為止  

94.next_value

[index]=

next_value[j

];//當前位置仍然匹配,遞迴賦值

98.j

=next_value[j

];//上次失配,這次重置j

#include "iostream"

#include "vector"

#include "string"

using namespace std;

bool bf_match(string to_be_matched,string pattern);

void getnextval(string pattern,int *next_value);

bool kmp_match(string to_be_matched,string pattern);

int main()

}

演算法之 字串匹配演算法

一說到兩個字串匹配,我們很自然就會想到用兩層迴圈來匹配,用這種方式就可以實現乙個字串是否包含另乙個字串了,這種演算法我們稱為 bf演算法。bf演算法,即暴力 brute force 演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串 s 的第乙個字元與模式串 t 的第乙個字元進行匹配,若相...

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

字串匹配之KMP演算法

以前零零散散做了些kmp的題目,一直也沒找出時間整理,這一段又開始研究字串了,就順便把kmp整理了一下。廢話不說了,我們直接入題。說到kmp,首先應該知道,它是一種字串查詢演算法,因為是由乙個姓k,乙個姓m和乙個姓p的人聯合發表的,所以就叫kmp演算法了。kmp演算法是一種線性時間的的字串匹配演算法...