<Cadena coincidente> algoritmo KMP de la violencia para resolver por qué el tiempo es menos complejo?

representa un str cadena de texto, m representa un cadena de patrón;

str [i] y m [j] coincide con el carácter está siendo comparado;

 

KMP tiempo de complejidad es O (m + n), la violencia, es resolver el tiempo de complejidad O (m * n)

 

KMP utiliza m [0: j-1] y str [ij: i-1] que es el mismo, pero obviamente, no puede resolver la violencia.

 

int kmp ( string str, cadena m) 
{ 
    int siguiente [MAXN]; 
    Siguiente [ 0 ] = - 1 ;
    int i = 0 ;
    int j = - 1 ;
    mientras que (i < m.size ()) 
    { 
        si (j == - 1 || m [i] == m [j]) 
        { 
            i ++ ; 
            j ++ ; 
            Siguiente [i] = j; 
        } 
        Más 
        { 
            j =Siguiente [j]; 
        } 
    } 

    I = 0 ; 
    j = 0 ;
    mientras que (i <str.size () && j < m.size ()) 
    { 
        si (j == - 1 || str [i] == m [j]) 
        { 
            i ++ ; 
            j ++ ; 
        } 
        Más 
        { 
            j = siguiente [j]; 
        } 
     Si (j == m.size () - 1)
     {
      ij retorno;
     } }
   Volver -1; }

 

Supongo que te gusta

Origin www.cnblogs.com/dynmi/p/12497500.html
Recomendado
Clasificación