字串匹配演算法

2021-08-15 21:13:26 字數 2153 閱讀 8899

在字串str中定位/查詢某個字串sub的操作通常被稱為字串的模式匹配。字串匹配有多種演算法,這裡總結一下bf演算法和kmp演算法。

bf演算法

bf演算法是乙個暴力演算法,從str的第乙個字元開始,依次比較str和sub中的字元,如果沒有完全匹配,則從第二個字元開始,再次比較,如此重複,直到找到sub的完全匹配或者不存在匹配。這裡設str和sub的長度分別是m和n,則它在最壞情況下的時間複雜度是o(m*n)。

設str="ababcabcacbab",sub="abcac",匹配過程如下:

第一趟   str  :  

a  b  a  b  c  a  b  c  a  c  b  a  b

sub: a  b 

c第二趟   str  :   

a  b  a  b  c  a  b  c  a  c  b  a  b

sub:    

a第三趟   str  :   

a  b  a  b  c  a  b  c  a  c  b  a  b

sub:         a  b  c  a 

c 第四趟   str  :   

a  b  a  b  c  a  b  c  a  c  b  a  b

sub:            

a 第五趟   str  :   

a  b  a

bc  a b  c  a  c  b  a  b

sub:                

a 第六趟   str  :   

a  b  a

b  c  a b  c  a  c  b  a  b

sub:                 a b

c  a  c  b

該 演算法**如下:

int bf(const char *str, const char *sub, int pos)  //pos為開始查詢的位置

int lenstr = strlen(str);

int lensub = strlen(sub);

int i = pos;

int j = 0;

while (i= lensub) //匹配成功

else

}

kmp演算法

kmp演算法是時間複雜度為o(m+n)的字串匹配演算法,它的主要思想是:每當一趟匹配過程中出現字元不匹配時,不需要回退i指標,而是利用已經得到的「部分匹配」的結果將模式向右「滑動」盡可能遠的一段距離後,繼續匹配過程。

設str="ababcabcacbab",sub="abcac",匹配過程如下:

第一趟                     i=2

str  :  

a  b  a  b  c  a  b  c  a  c  b  a  b

sub: a  b  c

第二趟                                     i=6

str  :  

a  b  a  b  c  a  b  c  a  c  b  a  b

sub:         a  b  c  a  c

第三趟                                                 i=10

str  :  

a  b  a

b  c  a  b  c  a  c  b  a  b

sub:                     a  b  c  a  c

該演算法**如下:

int kmp(const char *str,const char *sub,int pos)//o(n+m)  

int lenstr = strlen(str);

int lensub = strlen(sub);

int i = pos;

int j = 0;

int *next = (int *)malloc(lensub*sizeof(int));

getnext(sub,next);

while(i= lensub)//找到了

else

}

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

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

字串匹配演算法

首先引用一下另一篇文章中對字串匹配的介紹 字串匹配指的是從文字中找出給定字串 稱為模式 的乙個或所有出現的位置。本文的演算法一律輸出全部的匹配位 置。模式串在 中用x m 來表示,文字用y n 來,而所有字串都構造自乙個有限集的字母表 其大小為 根 據先給出模式還是先給出文字,字串匹配分為兩類方法 ...

字串匹配演算法

平常操作文字的時候,經常需要操作對字串進行操作。而字串中最重要的一種操作就叫匹配,字串的匹配演算法很多,人們最熟悉的莫過於kmp演算法了。今天就來談一談一些字串匹配演算法。先來說說大名鼎鼎的kmp演算法,這個演算法出現在無數的資料結構與演算法書上面。它的策略很簡單 當模式串第k個字元不匹配主串中第s...