<字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

<字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?

dynmi   2020-03-15 我要评论

str表示文本串,m表示模式串;

str[i] 和 m[j] 是正在进行匹配比较的字符;

 

KMP的时间复杂度是O(m+n)  ,  暴力求解的时间复杂度是O(m*n)

 

KMP利用了m[ 0 : j-1 ]和str[ i-j : i-1 ]是相同的这一点,而暴力求解显然做不到.

 

int kmp(string str,string m)
{
    int next[MAXN];
    next[0] = -1;
    int i=0;
    int j=-1;
    while(i<m.size())
    {
        if(j==-1 || m[i]==m[j])
        {
            i++;
            j++;
            next[i] = j;
        }
        else
        {
            j = next[j];
        }
    }

    i=0;
    j=0;
    while(i<str.size() && j<m.size())
    {
        if(j==-1 || str[i]==m[j])
        {
            i++;
            j++;
        }
        else
        {
            j =next[j];
        }
     if(j==m.size()-1)
     {
      return i-j;
     } }
   return -1; }

 

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们