字串匹配演算法

2021-07-11 14:48:02 字數 1401 閱讀 9333

字串匹配(string match)是在實際工程中經常會碰到的問題,通常其輸入是原字串(string)和子串(又稱模式,pattern)組成,輸出為子串在原字串中的首次出現的位置。通常精確的字串搜尋演算法包括暴力搜尋(brute force),kmp。下面分析這幾種方法並給出其實現。假設原字串長度m,字串長度為n。

1. brute force.

該方法又稱暴力搜尋,也是最容易想到的方法。

預處理時間 o(0)

匹配時間複雜度o(n*m)

/*ret=0,find與text不匹配

*ret = -1,輸入不符合要求

*ret = -2,find的長度小於text的長度

*若匹配,返回text中開始匹配的位置

*/int brute_force(const char *text, const char *find)

int find_len = strlen(find);

int text_len = strlen(text);

if (text_len < find_len)

char *psmall = find;

char *pbig = text;

while (*pbig != '\0')

else

if (*psmall == '\0')

}return ret;

}

2. kmp.

kmp是經典的字串匹配演算法。

匹配時間複雜度:o(n)

主要過程:通過對字串進行預處理,當發現不能匹配時,可以不進行回溯。

int kmp(const char *text, const char *find)

//判斷匹配字串的長度

int find_len = strlen(find);

int text_len = strlen(text);

if (text_len < find_len)

//建立匹配陣列

int next[find_len];

memset(next, 0, find_len*sizeof(int));

next[0] = 0;

next[1] = 0;

int j = 0;

int i = 1;

while (i < find_len)

else

}else

}i=0;

j=0;

while (i <=text_len && j<=find_len)

else

}if (j==find_len)

}return ret;

}

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

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

字串匹配演算法

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

字串匹配演算法

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