串的模式匹配演算法 BF演算法及其複雜度

2021-08-14 04:46:42 字數 994 閱讀 5700

s串為主串,t為待匹配串,用i、j分別指示s和t中的字元位置,i、j初值均為0。

演算法步驟:(1)若當前比較的字元是s【i】==t【j】,則繼續向後比較,執行(i++,j++);

(2)若當前正在比較的字元不匹配呢?那麼j回溯到位置0(即令j=0),i呢?回溯到主串的i-j+1處

0 1 2 3 4 5 6 7

a b a b c a b d i=2

a b d j=2

a b d j=2;i=7(匹配完成) j=3;i=8

(3)如何判定什麼時候能繼續比較,什麼時候匹配完成呢?

顯然,匹配操作要求s串和t串都沒到串尾,用語句(i

#include "stdafx.h"

#include

#include

using

namespace

std;

int bf_match(string &s1, string &s2) //"bf演算法"

else

}if (j >= n2) return (i-n2+1);

return0;}

void main()

設s長n,t長m

最好時間複雜度:

最好情況下,在主串第i個位置匹配成功,最好情況下前i-1次每次第一次匹配就失配,前i-1趟比較i-1次,總共進行i-1+m次比較,i可以是從位置1到n-m+1的任何位置:

1/(n-m+1)∑i-1+m=1/2(n+m)

最壞時間複雜度:

最壞情況下,前i-1次每次比較m次才確定失配,前i-1次共比較(i-1)*m,總共比較(i-1)*m+m次,

1/(n-m+1)∑i*m=1/2m*(n-m+2)

用bf演算法,每次匹配不成功,主串都要回到i-j+1位置處重新比較,可顯然這個回溯操作可以跳過,s與t失配前的i-j——i位與t的前j-1位相同,那麼通過t自己匹配自己,我們能否知道s和t匹配過程中可以跳幾位呢?

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

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

BF演算法 串的模式匹配

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

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

二 時間複雜度 三 c 實現 bf演算法是一種蠻力演算法,其實現過程沒有任何技巧,就是簡單粗暴地拿乙個串同另乙個串中的字元一一比對,得到最終結果。演算法目的 確定主串中所含子串第一次出現的位置,這裡的子串也稱為模式串。1 主串和模式串逐個字元進行比較 2 當出現字元不匹配 失配 時,主串的比較位置重...