字串匹配 暴力搜尋演算法

2021-07-24 17:05:05 字數 3237 閱讀 8858

主要特徵

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...