主要特徵
1、沒有預處理階段
2、需要常量額外空間
3、通常需要模式串視窗向右移動乙個位置
4、可以按照任意順序進行比較
5、搜尋的時間複雜度為
o(mn)
6、文字字元期望比較次數
:2n演算法描述
暴力搜尋演算法由文字串中從0到
n-m所有位置的比較組成,無論是否從模式串的起始位置開始,每次匹配過後,模式串向右移動一位。暴力搜尋演算法沒有預處理階段,文字串和模式串需要常量額外空間,在搜尋階段的文字串的字元可以按照任意順序進行比較,匹配的時間複雜度為
o(mn)
,c**實現
int bf(char *x, int m, char *y, int n) }
上面的演算法可以改寫為下面更加高效的演算法:
#define eos '\0'
int bf(char *x, int m, char *y, int n) 舉例
第1次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg 1
2 34
g c
a g
a g
a g
第2次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第3次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第4次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第5次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第6次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1 2
3 4
5 6
7 8
g c a
g a
g a
g
第7次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第8次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第9次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1 2
g c a
g a
g a
g
第10次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第11次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1 2
g c a
g a
g a
g
第12次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第13次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1 2
g c a
g a
g a
g
第14次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第15次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第16次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
第17次嘗試 g
c at c
g ca g
a ga g
t at a
c ag t
a cg
1
g c
a g
a g
a g
字串匹配 暴力搜尋演算法
1 沒有預處理階段 2 需要常量額外空間 3 通常需要模式串視窗向右移動乙個位置 4 可以按照任意順序進行比較 5 搜尋的時間複雜度為o mn 6 文字字元期望比較次數 2n 暴力搜尋演算法由文字串中從0到n m所有位置的比較組成,無論是否從模式串的起始位置開始,每次匹配過後,模式串向右移動一位。暴...
字串搜尋演算法
參考文獻 google boyer moore 1.前言 字串搜尋是乙個基本的操作,c庫函式中也提供了strstr 函式進行字串搜尋,應該是屬於線性搜尋。此外,為提高搜尋速度,人們又發展 出一些快速搜尋演算法,如boyer moore演算法等,其與線性搜尋的區別是當發現模式不匹配時,不是象線性搜尋那...
字串暴力匹配演算法
暴力匹配演算法 如果用暴力匹配的思路,並假設現在 str1 匹配到 i位置,子串 str2 匹配到 j 位置,則有 1 如果當前字元匹配成功 即 str1 i str2 j 則i j 繼續匹配下乙個字元 2 如果失配 即 str1 i str2 j 令i i j 1 j 0 相當於每次匹配失敗時,i...