zoukankan      html  css  js  c++  java
  • 字符串匹配--暴力搜索算法

    主要特征

    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 ''
       
    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
  • 相关阅读:
    SAP S/4HANA OData Mock Service 介绍
    SAP S/4HANA Cloud SDK 入门介绍
    SAP Cloud SDK for JavaScript 的搭建和使用方法介绍
    SAP Cloud SDK for JavaScript 概述
    如何在 SAP BTP ABAP 编程环境里直接调用 ABAP On-Premises 系统的 RFC 函数
    3-16计划
    HBASE基础(5):语法(3) API (2) DML
    HBASE进阶(3):重要工作机制(2)读流程
    HBASE进阶(2):重要工作机制(1) 写流程/MemStore Flush
    JavaWeb 之 Ajax
  • 原文地址:https://www.cnblogs.com/wuyudong/p/brute-force-algorithm.html
Copyright © 2011-2022 走看看