程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 字符串匹配--暴力搜索算法,字符串--暴力算法

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

編輯:C++入門知識

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


主要特征

1、沒有預處理階段

2、需要常量額外空間

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

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

5、搜索的時間復雜度為O(mn)

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

本文地址:http://www.cnblogs.com/archimedes/p/brute-force-algorithm.html,轉載請注明源地址。

算法描述

暴力搜索算法由文本串中從0到n-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

想找一個解決兩個字符串匹配程度的算法

假設string1="abcde",string2="bcd",則分析邏輯如下:
1. 如果string2長於string1,則不匹配
2. 在string1中順序查匹配string2中第一個字符的字符,
查到後,如果string1余下的字符串長度小於string2的長度,則不匹配
3. 在上述條件滿足時,將string1的下一個字符和string2中的第二個字符匹配,以此類推,一旦有一個不匹配,則不匹配。回到第2步,查找下一個和string2首字符一致的字符。
4. 如果string2中的字符全都匹配上,則說明string2中string1中識別出來了。
 

字符串匹配算法

樓主,你指的“多重算法”是什麼意思? 多重匹配但只掃描一次?
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved