【问题标题】:High speed string matching algorithms高速字符串匹配算法
【发布时间】:2012-07-24 16:56:53
【问题描述】:

我基本上是在对一些高速字符串匹配算法进行基准测试,我遇到了一些。

  1. 反向非确定性 DAWG(有向无环字图) Gonzalo Navarro 和 Mathieu Raffinot 的匹配算法。看到 后缀自动机的位并行方法:快速扩展字符串 匹配”

  2. Horspool 改进版的 Boyer-Moore String 搜索算法。请参阅“字符串中的实用快速搜索”

  3. 不匹配的移位或算法

  4. KMP

我可以尝试其他更好的高速字符串匹配算法吗?

编辑:在类似的行中还有另一个thread,它也有很好的参考

【问题讨论】:

标签: string algorithm


【解决方案1】:

你也可以试试

【讨论】:

    【解决方案2】:

    据我所知,双向字符串匹配是字符串匹配的最佳通用算法。它具有线性的最坏情况复杂性,使用恒定空间,并且不会过多地回溯。而且它背后的理论非常好。

    如果您知道您的用户不是混蛋,那么针对您的架构优化的天真字符串匹配将赢得短“针”,而 Boyer-Moore 变体将开始真正为长“针”做次线性的事情。然而,朴素的字符串匹配具有二次最坏情况,可以使用 Boyer-Moore 来检查输入中的所有字符。处理不匹配所需的额外表实际上比双向字符串匹配带来了令人惊讶的严重惩罚。

    【讨论】:

      【解决方案3】:
      import java.util.Scanner;
      
      public class StringMatch {
      
      static int temp,i=0,j=0; static boolean flag=true,matcher=false;
      
          static String str=null,mstr=null;static char astr[],amstr[];
      
              static void getter(){
              Scanner sc = new Scanner(System.in);
              str = sc.nextLine();
              //String str="today is Monday"; 
              astr=str.toCharArray();
               mstr = sc.nextLine();
              //String mstr="is"; 
               amstr=mstr.toCharArray();
          }
          static void stringMatch(){
              while(i<astr.length){
                  if(astr[i]==amstr[j]){
                  while((j!=amstr.length)&&flag){temp=i;
                      if(astr[i]!=amstr[j]) {flag=false;matcher=false;}
                      else{matcher=true;}
                      i++;j++;
                      //System.out.println(i+"\t"+j);
                  }if(matcher==true)break;i=temp;}i++;j=0;flag=true;
      
              }
              if(matcher==true) {System.out.println("true");}
              else    {System.out.println("false");}
          }
          public static void main(String[] args) {
      
          StringMatch.getter();
          StringMatch.stringMatch();
      
          }
      }
      

      【讨论】:

      • 欢迎。你可以通过解释一些关于这个算法的东西来使这个答案更好,也许它与问题中提到的算法相比如何?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多