BF演算法 串的模式匹配

2021-09-24 04:45:27 字數 1272 閱讀 5756

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

這裡我們來詳細講一下 演算法的核心思想

1.從主串第乙個字元開始匹配

2.如果找到匹配的 ——》 繼續逐個尋找後面是否與子串匹配 ——》全部匹配 指標調回第乙個位置(指標回溯) 返回匹配的位置

3.始終未找到匹配的 ——》 返回未找到的標識

但是我們想過是否指向子串的指標j 與 指向主串的指標i 是否始終存在一種對應關係?

因此可以簡化搜尋**

int i = pos , j = 1; //i為開始尋找的位置

while(i <= slen && j <= tlen)

if(slen[i] == tlen[j])

else

if(j > tlen)//未搜尋到

return i - tlen;

return 0;

}

下面我們使用bf演算法匹配並且對比之前的匹配演算法

之前演算法

}

// 尋找從pos開始子串在父串中的位置 返回位置

int index_heapstring(hstring * parent , hstring * child , int pos)

else

} free(substr);

return 0;

}

bf演算法

//暴風演算法實現返回子串在主串的位置

int bfcompare(hstring * parent,hstring * child,int pos)

else

}if(j > child->length)

return 0;

}

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

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

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

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

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

演算法的基本思想是 從主串s的第pos個字元起和模式的第乙個字元比較,若相等,則繼續逐個比較後續字元 否則從主串的下乙個字元起再重新和模式的字元比較。依次類推,直至模式t中的每個字元依次和主串s中的乙個連續的字串行相等,則稱匹配成功,函式值為和模式t中的每個字元依次和主串s中的序號,否則稱匹配不成功...