La Red de Conocimientos Pedagógicos - Conocimientos universitarios - Examen de ingreso de posgrado de 2015: ¿Algoritmos de uso común para estructuras de datos informáticos (4)?

Examen de ingreso de posgrado de 2015: ¿Algoritmos de uso común para estructuras de datos informáticos (4)?

Capítulo 4

La diferencia clave entre el algoritmo KMP y el algoritmo de coincidencia ingenuo es resolver el retroceso del puntero de cadena principal I. El principio es el siguiente.

Establezca la cadena principal S[] y la cadena de patrón T[], por ejemplo, compárelas 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 tenga la definición más larga. 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; amp ampampj lt=T[0])

Si(j=0||S[i]=T[j])//j=0 significa que la cadena del patrón ha regresado al punto inicial, eso Es decir, en esta posición es totalmente imposible.

i j //debo moverme hacia abajo, J devuelve 1.

De lo contrario j=next[j]

if(j gt; T[0]) devuelve i-T[0]

En caso contrario, devuelve 0

Métodos y principios para encontrar el siguiente[j]

Supongamos que k=siguiente[j] entonces t 1 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 siguiente[j 1] = k 1 = siguiente[j] 1 y t1t2...tk-1 = = TJ-k 1...TJ-2tj-6558.

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 es igual, entonces 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 j=0//i representa el siguiente que estás buscando actualmente.

Y(i

si(j=0 | | T[i]=T[j])

i

j

next[i]=j

Else j=next[j]

Porque next[] está en el proceso de comparación, 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]], corregimos next[j]

Para nextval[j]=next[next[j]], esto se puede reducir.

Void get_nextval(Sstring T, int nextval[])

i=1 nextval[1]=0 j=0

mientras(i

si(j=0 || T[i]= T[j])

i

j

si(T[ i]! =T[j])

nextval[i]=j

Otros

nextval[i]=siguiente[j ]

Otro

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 real de? P1p2... y que PJ coincide en ambos extremos es la subcadena verdadera más grande.

El valor de la función de falla (es decir, siguiente) depende solo de la cadena del patrón en sí. no coincide con el carácter I-ésimo de la cadena principal, la cadena principal no retrocederá. En comparación con el carácter I-ésimo, el carácter k-ésimo de la cadena patrón tiene ' p 1...PK-1 ' = '. pj-k 65438. De esta forma, 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 mínimo, evitando posibles pérdidas de coincidencia causadas por el desplazamiento a la derecha. Arriba está el algoritmo de estructura de datos en el Capítulo 4. Espero que los candidatos puedan memorizar estos algoritmos para facilitar futuras aplicaciones de exámenes y operaciones prácticas. Finalmente, les deseo todo lo mejor en el examen.

Lectura recomendada:

Examen de ingreso de posgrado 2015: resumen de algoritmos de uso común para estructuras de datos informáticos

Si tiene preguntas sobre el examen de ingreso de posgrado, no sabe cuál es el contenido del examen de ingreso de posgrado El centro de exámenes es En resumen, si no comprende las políticas locales para el registro de exámenes de ingreso de posgrado, haga clic en la parte inferior para consultar el sitio web oficial y obtener materiales de revisión gratuitos: /xl/

.