<字符串匹配>KMP算法為何比暴力求解的時間復雜度更低?


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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM