串的模式匹配(C語言實現) BF演算法

2021-09-02 05:44:01 字數 1095 閱讀 7670

串的模式匹配演算法:子串的定位運算

演算法思想

設有主串s,模式t。有 i 和 j 分別指向s和j的首個元素。(i=1;j=1;)

設有pos。pos指t在s中首次出現的位置的首位址。初始指向s的首元素。

將t中的首個元素與s中首個元素對比    

①若相同:i++與j++對比

關於儲存:採用定長順序儲存結構。

(ps:從下標為1的陣列分量開始儲存,下標為0的分量閒置不用。)

**實現

#include#include#define maxlen 255		//串的最大長度  

//採用靜態順序儲存結構(定長)

typedef structsstring;

//bf演算法

//查詢 模式t 在 主串s 中第pos個字元開始第一次出現的位置,並返回

//若不存在,則返回0 (t非空,1<=pos<=s.length)

int index_bf(sstring s,sstring t,int pos)

else

} if(j>t.length) //匹配成功

return i-t.length;//主串指標位置往回退模式長度個單位,就回到了該模式在主串中第一次出現的位置

else //匹配失敗

return 0; //返回0(順序儲存的字串是從下標為1的陣列分量開始儲存的,下標為0的分量閒置不用) }

//主函式

int main()

時間複雜度:(主串s長為n,子串t長為m)

最好的情況:o(n+m)每次不匹配的都是模式串t的首字母(不成功就直接換下乙個來比較)

最壞的情況:o(m*n)每次不成功的匹配都是模式串t的最後乙個字母(每次快成功了又從頭開始)

總的來說,複雜度還是挺高的,但是符合人的基本思維,易於理解,程式設計實現容易。

如果要提高效率,試試kmp演算法(但是kmp就沒這麼好理解咯)。

BF演算法 串的模式匹配

bf演算法,即暴風 brute force 演算法,是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串t的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和 t的第二個字元 若不相等,則比較s的第二個字元和t的第乙個字元,依次比較下去,直到得出最後的匹配結果。bf演算法是...

樸素的串模式匹配(C語言實現) 串模式匹配

從主串 s 的第 pos 個字元起和模式 t 的第乙個字元比較之,若相同,則繼續比較後續字元 否則從主串 s 的下乙個字元起再重新和模式 t 的字元比較之。例 s jinanshi t nan 當採用定長順序儲存結構時,實現此操作的演算法如下 int index sstring s,sstring ...

BF演算法 串的模式匹配演算法

子串的定位運算通常稱為串的模式匹配或串匹配。串的模式匹配設有兩個字串s和t,設s為主串,也稱正文串 設t為子串,也稱模式。在主串s中查詢與模式t相匹配的子串,如果匹配成功,確定相匹配的子串中的第乙個字元在主串s 現的位置。著名的模式匹配演算法有bf演算法和kmp演算法,下面介紹bf演算法。模式匹配不...