La diferencia clave entre el algoritmo KMP y el algoritmo de coincidencia ingenuo es que resuelve el retroceso del puntero de cadena principal I. El principio es el siguiente:
Establezca el principal La cadena S[] y los caracteres de patrón String T[], por ejemplo, se comparan con el carácter j de la cadena de patrón. Cuando el puntero de cadena principal I se compara con el puntero de cadena de patrón J, significa que todos los caracteres que los preceden han sido iguales en consecuencia. Pero
El siguiente [j]=k se define como t 1 T2...TK-1 = = TJ-K 1tJ-K 2...TJ-1 y K son los más grandes, y hay ya no uno.
Entonces, cuando Si y Tj no se pueden comparar, sí se pueden comparar Si y Tk. No puede haber una coincidencia tan exitosa porque S2S3...Si-1 = = T2T3...TJ-1 y T2T3...TJ-1 no son iguales a T1t2...TJ-2. A menos que next[j]= j-1; porque next define el más largo. Por lo tanto, es poco probable que cualquier coincidencia de cadena con un desplazamiento menor que next[j] tenga éxito. Hasta que se compare Tnext[j] con S[i], se logrará el éxito más temprano posible.
Int KMP_Index(Sstring S, Sstring T, int pos)
{
i = posj = 1;
mientras(i lt= S[0] amp; ampj lt=T[0])
{
If(j=0||S[i]=T[j])// j = 0 significa que la cadena del patrón ha regresado al punto inicial, lo que significa que es completamente imposible en esta posición.
{ I; j; }//Debo moverme hacia abajo, J devuelve 1.
else j = next[j];
}
if(j gt; T[0]) devuelve I-T[0];
De lo contrario, devuelve 0;
}
Métodos y principios para encontrar el siguiente[j]
Supongamos que k = siguiente[j]; T2 …TK-1 = = TJ-K 1…TJ-2tj-1;
Si Tj= =Tk, entonces t 1 T2…Tk-1tk = = TJ-K 1…TJ-2tj- 1tj ;
Entonces next[j 1]= k 1 = next[j] 1; y t1t2...TK-1 == TJ-K 1...TJ-2tj-1 ya está.
La secuencia más larga, por lo que k 1 es también la siguiente más larga [j 1].
Si Tj no es igual a Tk, entonces necesitas encontrarlo nuevamente. Eso es... ¿TJ-1TJ? ,
T1T2…
Entonces siguiente[j 1]primero = k = siguiente[j]; es decir...TJ-1TJ? ,
T1T2…Tk-1.
Si no, siguiente[j 1]= siguiente[k]; es decir... ¿TJ-1TJ? ,
T1T2…Tnext[k]-1
Hasta que se encuentre dicha secuencia, es decir... ¿TJ-1TJ? ,
T1T2...a
Entonces, siguiente[j 1]= siguiente[siguiente[j]]= siguiente[siguiente[j]]...= o 1;
Void get_next(Sstring T, int next[])
{
I = 1; next[1] = 0; i representa el siguiente actual.
Y(i
{
si(j=0 | | T[i]=T[j])
{
yo;
j;
siguiente[I]= j
}
más j = next[j];
}
}
Debido a next[] en el proceso de coincidencia, si T[j]= T[next[j] ] ;Entonces, cuando S[i] no es igual a T[j],
S[i] definitivamente no es igual a T[k = next[j]];
Entonces S[i ] debe compararse directamente con T[next[k]]. Modificamos next[j]
para que sea nextval[j]= next[next[j]]; menos
Void get_nextval(Sstring T, int nextval[])
{
I = 1; nextval[1]= 0;
Y(i
{
si(j=0 || T[i]= T[j])
{
I;
j;
if(T[i]!=T[j])
nextval[I]= j;
Otros
nextval[I] = siguiente[j];
}
Otros
j = nextval[j] ];
}
Una cadena de espacios se refiere a una cadena compuesta de caracteres de espacio (valor ASCII 32) y su longitud es igual al número de espacios.
En la definición de la función de falla f utilizada en el algoritmo KMP para la comparación de pruebas de modelos, ¿por qué se requiere que P1p2...PF (j) sea una subcadena verdadera de P1p2... y sea la ¿La subcadena verdadera más grande de PJ coincide en ambos extremos? /p>
El valor de la función de falla (es decir, siguiente) solo depende de la cadena del patrón en sí si el carácter j-ésimo no coincide con el carácter I-ésimo. cadena principal, la cadena principal no retrocederá con el carácter I-ésimo. En comparación con los caracteres, el carácter k-ésimo de la cadena de patrón tiene 'p 1...PK-1' = 'pj-k 65438. De esta manera. , dado que j-k es el más pequeño, es decir, el número de dígitos que la cadena del patrón se desliza hacia la derecha es el más pequeño, evitando posibles pérdidas por coincidencia.
El Capítulo 4 analiza los algoritmos de estructura de datos. Espero que los candidatos puedan memorizar estos algoritmos para futuras aplicaciones de exámenes y operaciones prácticas.
Para obtener más detalles, haga clic en: Examen de ingreso de posgrado en computadora: análisis y resumen de algoritmos de uso común para estructuras de datos
. Si tiene preguntas sobre el examen de ingreso de posgrado, no sabe cómo resumir el contenido del centro de exámenes de ingreso de posgrado y no conoce las políticas locales para el registro del examen de ingreso de posgrado, haga clic en la parte inferior para consultar. sitio web oficial y obtenga materiales de revisión gratis: /xl/