String 高速字符串匹配算法

String 高速字符串匹配算法,string,algorithm,String,Algorithm,我基本上是在测试一些高速字符串匹配算法,我遇到了一些 向后非确定性DAWG(有向无环字图) Gonzalo Navarro和Mathieu Raffinot的匹配算法。见“A” 后缀自动机的位并行方法:快速扩展字符串 “匹配” Horspool改进版的Boyer-Moore弦 搜索算法。请参阅“字符串中的实用快速搜索” 移位或不匹配算法 还有其他更好的高速字符串匹配算法吗 编辑:类似的行中还有另一行,它也有很好的参考资料您也可以试试 :在某些方面甚至比KMP更整洁 :基于Trie,最初用于f

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

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

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

  • 移位或不匹配算法

  • 还有其他更好的高速字符串匹配算法吗

    编辑:类似的行中还有另一行,它也有很好的参考资料

    您也可以试试

    • :在某些方面甚至比KMP更整洁
    • :基于Trie,最初用于fgrep
    • :基于哈希的

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

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

    import java.util.Scanner;
    
    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();
    
        }
    }
    
    公共类字符串匹配{ 静态int-temp,i=0,j=0;静态布尔标志=true,匹配器=false; 静态字符串str=null,mstr=null;静态字符astr[],amstr[]; 静态空隙吸气剂(){ 扫描仪sc=新的扫描仪(System.in); str=sc.nextLine(); //String str=“今天是星期一”; astr=str.toCharArray(); mstr=sc.nextLine(); //字符串mstr=“is”; amstr=mstr.toCharArray(); } 静态void stringMatch(){
    while(我可以在这里看一看:非常好的收藏!非常感谢Nabb!欢迎。你可以通过解释这个算法的一些内容来做出更好的回答,也许它与问题中命名的算法相比如何?