字串的模式匹配 BF演算法

2021-07-28 20:00:33 字數 1015 閱讀 2347

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

bf演算法是一種蠻力演算法。蠻力搜尋,比較簡單的一種字串匹配演算法,在處理簡單的資料時候就可以用這種演算法,完全匹配,就是速度慢啊。

從目標串s 的第乙個字元起和模式串t的第乙個字元進行比較,若相等,則繼續逐個比較後續字元,否則從串s的第二個字元起再重新和串t進行比較。

依此類推,直至串t 中的每個字元依次和串s的乙個連續的字串行相等,則稱模式匹配成功,此時串t的第乙個字元在串s 中的位置就是t 在s中的位置,否則模式匹配不成功

首先s[1]和t[1]比較,若相等,則再比較s[2]和t[2],一直到t[m]為止;若s[1]和t[1]不等,則s向右移動乙個字元的位置,再依次進行比較。如果存在k,1≤k≤n,且s[k+1…k+m]=t[1…m],則匹配成功;否則失敗。

該演算法最壞情況下要進行m*(n-m+1)次比較,時間複雜度為o(m*n)。

s: ababcabcacbab

t: abcac

bf演算法匹配的步驟如下圖:

首先設定 s 和 t 的起始比較下標 i 和 j;

迴圈直到 i+m>n 或者t中的字元都比較完(j==m)

2.1 如果s[i]==t[j], 繼續比較s和t的下乙個字元,否則

2.2 將 i 和 j 回溯,準備下一輪比較

如果t中的字元都比較完(j==m),則返回比較的起始下標

否則返回-1,表示匹配失敗

int strstr(const

char *s, const

char *t)

return -1; // 匹配失敗

}

BF模式匹配演算法!字串的模式匹配。

problem description 實現串的bf模式匹配演算法,統計在匹配過程中總的字元比較次數,當主串剩餘部分不足子串長度時,停止比較。input 輸入包含兩行,第一行為主串s,第二行為子串t。output 輸出包含兩行,第一行為子串在主串中的位置,如果失配,返回0值 第二行為匹配過程中總的字...

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

include include intbf char str1,char str2,int length1,int length2,int pos int main 字串模式匹配演算法 str1為主串,str2為子串 length1為主串長度,length2為子串長度,intbf char str1...

字串模式匹配之BF演算法

演算法原理 bf brute force 演算法是字串模式匹配中原理最簡單,也是最直觀的演算法。基本思想是從源字串s中查詢目的字串p,從s中的n個字元開始和p的第乙個字元開始比較,若相等,則繼續分別取s和p的下乙個字元繼續比較,一次類推,直到源字串s中的某一連續串和p完全相等,則匹配成功。如果在匹配...