BF 暴力 演算法

2021-10-03 14:57:03 字數 1174 閱讀 7870

0x01 bf演算法簡介

bf演算法是用於在a字串尋找b字串的一種演算法,時間複雜度為o(n+m),正如它的名字一樣,是乙個很暴力的演算法。

0x02 暴力的體現

為啥說bf這個演算法暴力呢,不單單是因為名字,最主要的是體現在處理字串的方式上。

舉個栗子。位置0

1234

5678

字串aca

bcab

xbc字串bab

x如果讓bf演算法從a串中尋找b串的話,它會怎麼做呢?

首先,取a,b字串中的第乙個字元 a[0],b[0] 進行比較,也就是 『c』 和 『a』,很明顯是不相等的。

然後,取a串第二個字元 a[1]與b串中第乙個字元b[0] 進行比較,也就是 『a』 和 『a』,這是相等的。

接著,取a串第三個字元 a[2]與b串中第二個字元b[1] 進行比較,也就是 『b』 和 『b』,這也是相等的。

在接著,取a串第四個字元 a[3]與b串中第三個字元b[2] 進行比較,也就是 『c』 和 『x』,這是不相等的。

那麼我們就會對a,b字串當前下標所在的位置進行一次操作:

a.將a串的位置回溯到原來a,b兩個字元剛開始進行比較的位置即a串所在位置 - b串所在位置 + 1 = 3 - 2 +1 = 2,也就是a[2]處。

b.將b串的位置歸0,即b[0]處。

然後,取a串第三個字元 a[2]與b串中第乙個字元b[0] 進行比較,也就是 『b』 和 『a』,這是不相等的。

…(同上,一直到找到字串b位置)

0x03 **

#include

#include

using

namespace std;

intbfs

(char

* s1,

char

* s2)

else}if

(s2[j]

=='\0'

)return i-j;

//返回的應當是字串2首字元位置,而不是尾

else

return0;

}int

main()

0x04 bf演算法高階

kmp演算法

BF暴力匹配演算法

有同學問到我字串匹配的問題,一時間竟然想不起來bf演算法了,現在回顧一下,基本思想 現有模式串s 和待匹配串t 首先t 從s 的開頭開始匹配,如果相應位置匹配成功,則二者各向前走一位,如果失配,t串回溯到開頭,s 串回溯到上 次匹配成功的的開頭的下乙個位置。include include inclu...

BF演算法與KMP演算法

using system namespace kmp else count if j lenb 1 return i lenb else return 0 stathread static void main string args lenb p1.length,p2.length reval km...

BF演算法與KMP演算法

bf演算法思想 實現 public class bf int i 0 int j 0 i與j都從0號位置開始 while ilength j else if j sub.length 當j sub的長度時,說明sub陣列已經遍歷完了 else public static void main stri...