Examen de ingreso de posgrado en informática: ¿análisis de algoritmos de uso común para estructuras de datos (4)?

Capítulo 4

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/