La función z de una cadena es una matriz tal que es igual a la longitud del prefijo común más largo que comienza en la posición del sufijo de la cadena y la cadena misma . El algoritmo de construcción fue descrito por Dan Gasfield en su libro Strings, Trees and Sequences in Algorithms. Computer Science and Computational Biology” en 1997 [1] basado en el artículo de Maine y Lorenz de 1984 [2] sobre la búsqueda de todas las repeticiones en tándem en una cadena.
La función Z se utiliza en varios algoritmos de procesamiento de cadenas. En particular, puede usarse para resolver rápidamente el problema de encontrar una ocurrencia de una cadena en otra ( búsqueda por patrón ).
Almacenaremos los índices L y R , que denotan el principio y el final del prefijo con el mayor valor de R encontrado hasta el momento . inicialmente _
Conozcamos los valores de la función Z para las posiciones 1… i − 1. Tratemos de calcular el valor de la función Z para la posición i . Si , considere el valor de la función Z para la posición . If , entonces , ya que estamos en una subcadena que coincide con el prefijo de toda la cadena. Si , entonces es necesario calcular el valor de Z [ i ] mediante un bucle simple que recorre los caracteres después de R hasta que haya un carácter que no coincida con el carácter correspondiente del prefijo. Después de eso, cambiamos el valor de L a i y el valor de R al número del último carácter que coincide con el carácter correspondiente del prefijo.
Si , entonces consideramos el valor de Z [ i ] como un bucle simple que compara los caracteres de la subcadena que comienza con el i -ésimo carácter y los caracteres correspondientes del prefijo. Cuando se encuentra una discrepancia o se llega al final de la línea, cambie el valor de L por i y el valor de R por el número del último carácter que coincida con el carácter correspondiente del prefijo.
El tiempo de ejecución del algoritmo que calcula el valor de la función Z de la cadena S se estima en . Demostrémoslo.
Considere el i -ésimo carácter de la cadena. En el algoritmo, se considera no más de dos veces: la primera vez cuando cae en el segmento y la segunda vez cuando se calcula Z [ i ].
Por lo tanto, el bucle no procesa más que iteraciones.
1) La función Z se puede usar para buscar un patrón T en una cadena S ,
2) Conociendo la función Z de una cadena, se puede restaurar de forma única la función de prefijo de esta cadena, y viceversa.
Instrumentos de cuerda | |
---|---|
Medidas de similitud de cadenas | |
Búsqueda de subcadena | |
palíndromos | |
Alineación de secuencia | |
Estructuras de sufijos | |
Otro |