字符串匹配-暴力搜索算法

主要特徵

1、沒有預處理階段

2、需要常量額外空間

3、通常需要模式串窗口向右移動一個位置

4、可以按照任意順序進行比較

5、搜索的時間複雜度爲O(mn)

6、文本字符期望比較次數:2n

算法描述

暴力搜索算法由文本串中從0n-m所有位置的比較組成,無論是否從模式串的起始位置開始,每次匹配過後,模式串向右移動一位。暴力搜索算法沒有預處理階段,文本串和模式串需要常量額外空間,在搜索階段的文本串的字符可以按照任意順序進行比較,匹配的時間複雜度爲O(mn)

C代碼實現

int BF(char *x, int m, char *y, int n) {

   int i, j;

   /* 搜索*/

   for (j = 0; j <= n - m; ++j) {

      for (i = 0; i < m && x[i] == y[i + j]; ++i);

          if (i >= m)

              return j;

   }

}

上面的算法可以改寫爲下面更加高效的算法:

#define EOS '\0'

   int BF(char *x, int m, char *y, int n) {

  char *yb;

  /* 匹配*/

  for (yb = y; *y != EOS; ++y)

      if (memcmp(x, y, m) == 0)

          return y - yb;

}

舉例

第1次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

1

2

3

4

 

G

C

A

G

A

G

A

G

 

 

第2次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第3次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第4次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第5次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第6次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

2

3

4

5

6

7

8

 

 

G

C

A

G

A

G

A

G

 

 

第7次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第8次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第9次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

2

 

 

G

C

A

G

A

G

A

G

 

 

第10次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第11次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

2

 

 

G

C

A

G

A

G

A

G

 

 

第12次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第13次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

2

 

 

G

C

A

G

A

G

A

G

 

 

第14次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第15次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第16次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

 

 

第17次嘗試

G

C

A

T

C

G

C

A

G

A

G

A

G

T

A

T

A

C

A

G

T

A

C

G

 

1

 

 

G

C

A

G

A

G

A

G

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章