Red de conocimiento informático - Aprendizaje de código fuente - Algoritmo KMP para hacer coincidir cadenas principales y cadenas de patrones en estructuras de datos", escrito por Yan Wei, tercera edición

Algoritmo KMP para hacer coincidir cadenas principales y cadenas de patrones en estructuras de datos", escrito por Yan Wei, tercera edición

Cuando comencé a aprender KMP, mi comprensión era relativamente general.

En primer lugar, se puede considerar que NEXT es una cuestión de cadena de patrón y no tiene nada que ver con la cadena principal.

Cadena de patrón (alineación) abaabcac

El número de subíndice es 01234567

El valor de next[i] es el prefijo de la cadena de patrón 0~i- 1 El valor máximo de una cadena en la que el primer carácter siguiente[i] y la cadena que consta de los siguientes caracteres[i] son ​​exactamente iguales. Por supuesto, next[i] es menor que la longitud total de la cadena de prefijo.

Ejecuté el programa y el siguiente carácter de esta cadena de patrón es el siguiente:

Carácter de subíndice siguiente[i]

0 a -1

1 b 0

2 a 0

3 a 1

4 b 1

5 c 2

6 a 0

7 c 1

Para next[0] y next[1], sin sentido

next[2], ver antes Dos caracteres ab, el primer 1 es diferente del último 1, por lo que se toma 0.

siguiente[3], para aba, el primer 1 es el mismo que el último 1, pero la longitud 2 es diferente, por lo que siguiente[3]=1.

Y así En, enumere manualmente los valores de longitud de i-2 a 0 e intercepte la cadena de prefijo para comparar.

El cartel decía que next[6]=3 es un error de cálculo. -