0% encontró este documento útil (0 votos)
247 vistas18 páginas

Máxima - Algoritmos - Sufijo Autómata

Este documento describe el sufijo autómata, una estructura de datos que permite resolver problemas de cadenas de forma eficiente. Explica la definición formal de un sufijo autómata, sus propiedades clave como almacenar información sobre todas las subcadenas de una cadena en un formato comprimido, y presenta ejemplos simples. También introduce conceptos como las posiciones de terminación y clases de equivalencia que son fundamentales para entender el sufijo autómata y describe un algoritmo para construir uno en tiempo lineal.

Cargado por

Marco Collantes
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
247 vistas18 páginas

Máxima - Algoritmos - Sufijo Autómata

Este documento describe el sufijo autómata, una estructura de datos que permite resolver problemas de cadenas de forma eficiente. Explica la definición formal de un sufijo autómata, sus propiedades clave como almacenar información sobre todas las subcadenas de una cadena en un formato comprimido, y presenta ejemplos simples. También introduce conceptos como las posiciones de terminación y clases de equivalencia que son fundamentales para entender el sufijo autómata y describe un algoritmo para construir uno en tiempo lineal.

Cargado por

Marco Collantes
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

M xi m a
c as a A lgo book z foro s obre
Aadido: 10 ago 2008 19:50 Editado: 02 de mayo 2012 22:52

Sufijo autmata
Sufijo autmata (o un grafo dirigido acclico de las palabras ) - es una estructura de datos de gran alcance que nos permite resolver muchos problemas de la cadena. Por ejemplo, con el sufijo autmata puede buscar todas las apariciones de una cadena a otra, o para contar el nmero de subcadenas distintas de las cuerdas - que permite que tanto los problemas a resolver en un tiempo lineal. A un nivel intuitivo, el sufijo autmata se puede entender como la informacin concisa sobre todas las subcadenas de la cadena. Impresionante es el hecho de que el sufijo autmata contiene toda la informacin en un formato comprimido de modo que la longitud de la cadena , se requiere slo una memoria. Adems, tambin puede ser construido en el tiempo (si tenemos en cuenta el tamao del alfabeto, una constante, de lo contrario - por el momento ). Histricamente , el primer tamao lineal del sufijo autmata fue descubierto en 1983 por Blumer y otros, y en 1985 - 1986. present los primeros algoritmos para su construccin en un tiempo lineal (Crochemore, Blumer et al.) Para ms informacin - vase la bibliografa al final. Ingls sufijo autmata se llama "el sufijo autmata" (en plural - "autmatas sufijo"), un grafo dirigido acclico de las palabras - "grafo dirigido acclico de la palabra" (o simplemente "Dawg").

Contenido [ocultar]
Sufijo autmata Definicin de autmata, el sufijo Las propiedades ms simples del sufijo autmata Ejemplos de construccin de autmatas sufijo Un algoritmo para la construccin de sufijo de autmata en el tiempo lineal Las posiciones de las terminaciones propiedades y su relacin con el sufijo autmata Enlaces sufijos Total parcial Un algoritmo para la construccin de sufijo de autmata en el tiempo lineal La prueba de la correccin del algoritmo La prueba de la serie lineal de las operaciones La implementacin del algoritmo Propiedades adicionales de sufijo de autmata El nmero de estados El nmero de transiciones La comunicacin con el rbol de sufijos. La construccin de rbol de sufijos para el sufijo autmata y viceversa Las aplicaciones en la solucin de problemas Compruebe la entrada El nmero de subcadenas distintas La longitud total de subcadenas diferentes , sus

Definicin de autmata, el sufijo


Definicin. sufijo de autmata para una cadena dada se llama un mnimo determinista finita autmata que acepta todos los sufijos de una cadena . Interpretamos que esta definicin. Sufijo autmata es un grfico acclico dirigido en el que los vrtices se llaman estados y los arcos de la grfica - que es la transicin entre estos estados. Uno de los estados que se llama el estado inicial , y que ste debe ser

Lexicogrfico k-simo subcadena El ms pequeo cambio cclico Nmero de apariciones La posicin de la primera ocurrencia Las posiciones de todas las ocurrencias Encuentra la lnea ms corta no est incluido en este Naidlinneyshaya subcadena comn de dos cadenas Subcadena ms comn de unas pocas lneas. Problemas en los jueces de lnea Literatura

la fuente del grfico (es decir, accesible desde que todos los dems estados). Cada transicin en la mquina - este arco, marcado por un smbolo. Todas las transiciones procedentes de un Estado debe tener diferentes etiquetas. (Por otro lado, el estado no puede ser una conversin de los caracteres.) Uno o ms estados estn marcados como condiciones terminales . Si se pasa desde el estado inicial de cualquier camino hacia un estado terminal, y escribir con las etiquetas de todos los arcos atravesados, se obtiene una cadena que debe ser uno de los sufijos de una cadena . Sufijo autmata contiene un nmero mnimo de vrtices entre todas las mquinas que cumplan las condiciones descritas anteriormente. (El nmero mnimo de transiciones no es necesario porque la condicin de minimalidad del nmero de estados en el autmata no puede ser "redundante" formas-. De lo contrario se rompera la propiedad anterior)

Las propiedades ms simples del sufijo autmata


La propiedad ms simple, sin embargo, ms importante del sufijo autmata es que contiene informacin acerca de toda la subcadena . Es decir, cualquier camino desde el estado inicial , si escribimos las etiquetas de los arcos a lo largo de este camino, se asegura la subcadena de la cadena . Por el contrario, cualquier subcadena de la cadena corresponde

e-maxx.ru/algo/suffix_automata

1/18

08/08/12

este camino, se asegura la subcadena de la cadena . Por el contrario, cualquier subcadena de la cadena corresponde a una ruta que comienza en el estado inicial . Con el fin de simplificar la explicacin, diremos que la subcadena coincide con la trayectoria desde el estado inicial, que forman la etiqueta a lo largo de esta cadena. Por el contrario, se dice que cualquier camino corresponde a esa lnea, que marca sus arcos formulario. En todos los estados del sufijo autmata tiene una o ms rutas desde el estado inicial. Nosotros decimos que el Estado corresponde a un conjunto de cadenas que contienen todas estas rutas.

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Ejemplos de construccin de autmatas sufijo


Estos son ejemplos de autmatas construidos por un sufijo de lneas simples. El estado inicial se denota aqu Para la cadena : , y el estado de la terminal - para celebrar con un asterisco.

Para la cadena

Para la cadena

Para la cadena

Para la cadena

Para la cadena

Para la cadena

Un algoritmo para la construccin de sufijo de autmata en el tiempo lineal


Antes de ir directamente a la descripcin del algoritmo de construccin, debemos introducir algunos conceptos nuevos y probar algunas sencillas pero muy importantes para entender el sufijo autmata del lema.

e-maxx.ru/algo/suffix_automata

2/18

08/08/12

probar algunas sencillas pero muy importantes para entender el sufijo autmata del lema.

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Las posiciones de las terminaciones autmata

, sus propiedades y su relacin con el sufijo

Considere la posibilidad de cualquier subcadena no vaca de cadenas . Luego llame a la serie de terminales de juego de todos los puestos en una fila en la que se ha producido el extremo de la cuerda . Vamos a llamar a dos subcadenas y -equivalentes si sus conjuntos de terminaciones coinciden . Por lo tanto, todas las sub-cadenas no vacas se puede dividir en varias clases de equivalencia de acuerdo con sus conjuntos . Resulta que el sufijo autmata -equivalentes subcadenas se corresponde con el mismo estado . En otras palabras, el nmero de estados en el autmata, el sufijo es el nmero de clases de equivalencia entre todas las sub-cadenas, adems de un estado inicial. Cada uno de sufijo autmata corresponden a uno o ms subcadenas con el mismo valor . Esta declaracin que damos por sentado , y describe un algoritmo para construir el sufijo autmata en ese supuesto como veremos ms adelante, todas las propiedades requeridas por el sufijo de autmata, a excepcin de un mnimo, se cumplir. (Un mnimo de consecuencia del teorema Nerode - ver Referencias). Tambin presentamos algunas afirmaciones simples pero importantes acerca de los valores Lema 1 . Los dos subcadena no vaca , y ( en la cadena slo como una cadena sufijo . ) son .

-equivalentes si y slo si la cadena

La prueba es casi obvia. En una direccin, si y han la posicin de entrada mismo fin, que es un sufijo , y est presente slo como un sufijo . A la inversa, si un sufijo y es slo como este sufijo, entonces sus valores son iguales por definicin. Lema 2 . Considere dos subcadena no vaca , y disjuntos o total que figura en el ( ). Entonces se pusieron , y depende de si el sufijo o no: o son

PRUEBA. Supongamos que los conjuntos y tienen al menos un elemento comn. Entonces esto significa que la lnea y terminan en el mismo lugar, es decir, - el sufijo . Pero entonces cada aparicin de la cadena tiene en su extremo de la aparicin de la cadena , lo que significa que muchos de su totalmente embebido en el conjunto . Lema 3 . Considrese una clase de equivalencia. Ordenar todas las cadenas que se incluyen en esta clase, en no aumentar la longitud. A continuacin, las secuencias resultantes cada subcadena ser una ms corta que la anterior, y por lo tanto ser el sufijo pasado. En otras palabras, una subcadena que aparece en una clase de equivalencia, de hecho, son los sufijos de uno al otro, y tomar todas las clases de diferentes longitudes en un intervalo . PRUEBA. Fijar una clase de equivalencia. Si contiene slo una fila, entonces la correccin del lema es obvia. Supongamos ahora que el nmero de filas es ms de uno. De acuerdo con el Lema 1, dos diferentes -equivalentes lneas son siempre de tal manera que uno es un sufijo apropiado de otra. En consecuencia, en la misma clase -equivalencia no pueden ser cadenas de igual longitud. Se denota mucho tiempo, y despus - la cadena ms corta en la clase de equivalencia. De acuerdo con el lema 1, la cadena es un sufijo adecuado . Consideremos ahora cualquier cadena sufijo a la longitud del intervalo , y demostrar que est contenido en la clase de equivalencia. De hecho, este sufijo puede introducir slo como una cadena sufijo (porque el sufijo ms corto es slo en la forma de la cadena de sufijo .) Por lo tanto, por el Lema 1, el sufijo equivalente de lnea , como se requiere.

Enlaces sufijos
Considere la posibilidad de una mquina de estados cadenas con los mismos valores , y si denotamos Tambin sabemos que las primeras filas de los sufijos . Como sabemos ahora, como corresponde a una clase de el ms largo de estas lneas, todo lo dems ser sufijos .

(si tenemos en cuenta los sufijos en orden descendente de

e-maxx.ru/algo/suffix_automata

3/18

08/08/12

Tambin sabemos que las primeras filas de los sufijos (si tenemos en cuenta los sufijos en orden descendente de longitud) se encuentran en la misma clase de equivalencia, y todos los otros sufijos (por lo menos el sufijo vaco) - en algunas otras clases. Se denota el sufijo primero de estos - en que nos dedicamos a realizar el enlace sufijo. En otras palabras, el enlace sufijo conduce a un estado, que corresponde a la naidlinneyshy sufijo lnea que est en otra clase de equivalencia. Aqu asumimos que el estado inicial vaca), y creer ,

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

corresponde a una clase separada de equivalencia (que contiene slo la cadena . .

Lema 4 . Enlaces sufijo forman un rbol , cuya raz es el estado inicial

PRUEBA. Considere la posibilidad de un Estado arbitrario . Sufijo de conexin que va desde que el estado, que corresponden a las cadenas de longitud estrictamente menor que (esto se desprende de la definicin de los enlaces de sufijos y Lemma 3). Por lo tanto, moverse en los enlaces de sufijos, que tarde o temprano sale de su estado inicial , que corresponde a una cadena vaca. Lema 5 . Si construimos los conjuntos de todas las existentes rboles (en el principio de que "muchos de los padres tiene como un subconjunto de todos sus hijos"), que coincidir con la estructura de rbol de enlaces sufijo. PRUEBA. El hecho de que los conjuntos se puede construir un rbol, del Lema 2 (que cualquiera de los dos conjuntos son o bien discontinuo o una contiene la otra). Ahora considere un Estado arbitrario del Lema 2: y su relacin con el sufijo . De la definicin de los enlaces de sufijos, y

que junto con el lema anterior demuestra nuestra afirmacin de los vnculos de los rboles de sufijos inherentemente tienen varios conjuntos de rboles incrustados . He aqu un ejemplo de los enlaces de los rboles de sufijos en el sufijo autmata construido de la lnea :

Total parcial
Antes de proceder a la algoritmo muy sistematizar el conocimiento acumulado de la anterior, y se introduce un par de

e-maxx.ru/algo/suffix_automata

4/18

08/08/12

Antes de proceder a la algoritmo muy sistematizar el conocimiento acumulado de la anterior, y se introduce un par de smbolos auxiliares. El conjunto de subcadenas de una cadena se puede dividir en clases de equivalencia de acuerdo a sus aparatos de gama . El sufijo autmata consta de un estado inicial , y una de cada clase de equivalencia.

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Cada estado corresponde a una o ms filas. Denotemos el ms largo de estas lneas a travs de su longitud. Denotan la ms corta de estas lneas, y su longitud a travs . A continuacin, todas las lneas que corresponden a este estado, son la lnea sufijos diferentes todo tipo de cuerpos en el intervalo . , y tienen

Para cada estado se define sufijo de enlace que conduce a un estado que se corresponde con el sufijo de la cadena de longitud . Enlaces sufijo forman un rbol con raz en , y este rbol es, de hecho, es un rbol de relaciones de inclusin entre los conjuntos . Por lo tanto, a ser expresada utilizando los enlaces de sufijos como:

Si partimos de un estado arbitrario , y vamos a seguir los enlaces de sufijos, tarde o temprano se llega al estado inicial . En este caso se obtiene una secuencia de segmentos inconexos , que se funden en una sola pieza continua.

Un algoritmo para la construccin de sufijo de autmata en el tiempo lineal


Proceder a la descripcin del algoritmo. El algoritmo es en lnea , es decir, se sumar una cadena de caracteres , la reconstruccin adecuada de la mquina actual. Para lograr un consumo de memoria lineal en cada estado, slo almacenamos el valor , y una lista de las transiciones de este estado. Etiquetas estados terminales, no vamos a apoyar (vamos a mostrar cmo organizar estas etiquetas despus de la construccin del sufijo autmata, si hay una necesidad de ellos). En un principio, el autmata se compone de un solo Estado estados recibirn un nmero .) Asignar este estado referencia a un ficticio, inexistente estado). , que estamos de acuerdo en tomar un estado cero (otros , y el valor asignado por conveniencia (una

En consecuencia, todo el problema ahora se reduce a fin de realizar el procesamiento de la adicin de un carcter al final de la lnea actual. Se describe este proceso: Que - un estado que se corresponde con las adiciones de lneas enteras actuales para el personaje . (En un principio , y despus de agregar cada personaje, vamos a cambiar el valor .) Crear un nuevo Estado incierta. , colocndolo . El valor se considera todava

Hacemos un ciclo: en un principio somos capaces de , si no sale a la carta , a continuacin, agregar la transicin a la carta para el estado , y luego proceder al enlace el sufijo posterior comprobacin - si no hay una transicin, a continuacin, agregar. Si en algn momento suceda, que esta transicin ya est ah, y luego se detiene y dejar que el nmero de el estado en que sucedi. Si usted nunca ha sucedido, que el pasaje de la carta que ya tena, y que lleg a un estado ficticio (en el que hemos llegado a la relacin sufijo desde el estado inicial ), entonces podemos simplemente asignar un nmero y la salida. Supongamos ahora que nos detuvimos en un cierto estado , de la que la transicin ya estaba en la carta . Se denota el estado en que se trata de un cruce existente. Ahora tenemos dos casos en funcin de si Si o no. nmero y la salida.

, entonces, sencillamente, puede asignar un

De lo contrario, todo es ms complicado. Necesario para que la "clonacin" del estado : para crear un nuevo estado copiando todos los datos en l desde la parte superior (las transiciones de enlace sufijo), excepto para el valor : es necesario asignar . Despus de la clonacin, nos dedicamos a realizar el enlace de sufijo de de sufijo de una . este estado , y redirigir el enlace

Finalmente, la ltima cosa que debemos hacer - es ir con la condicin de los enlaces de sufijos, y para cada uno de

e-maxx.ru/algo/suffix_automata

5/18

08/08/12

Mxima algoritmos :: sufijo autmata. y aplicacin Finalmente, la ltima cosa::que debemos hacer - es ir Construccin con la condicin de los enlaces de sufijos, y para cada uno de los siguiente estado para verificar que si hubo un cambio en la carta al Estado , a continuacin, remitirlo al estado (y si no, luego se detiene).

En cualquier caso, cualquiera que sea ms de este procedimiento, se actualiza el valor en el extremo asignndole .

Si tambin tenemos que saber cules son los vrtices del terminal , y lo que - no, podemos encontrar todos los nodos terminales despus de la construccin del sufijo autmata para toda la lnea. Tenga en cuenta el estado que corresponde a toda la cadena (que, obviamente, que haya guardado en la variable ), y saldr a la de sus enlaces sufijo hasta llegar al estado inicial, y marcar cada una condicin cubierta como terminal. Es fcil comprender que, al hacerlo, nos etiquetan los estados correspondientes a toda la lnea de sufijos que se requiere. En la siguiente seccin, se examina en detalle en cada paso del algoritmo y demostrar su veracidad . Aqu slo observar que el algoritmo se puede ver que la adicin de un carcter conduce a la adicin de uno o dos estados en el autmata. As, la linealidad del nmero de estados es obvia. La linealidad del nmero de transiciones, y en general un algoritmo de tiempo lineal es menos conocida, y se prob a continuacin, despus de la prueba de la exactitud del algoritmo.

La prueba de la correccin del algoritmo


Llamamos a la transicin slida , si . En el caso opuesto, es decir Cuando la transicin se denomina discontinua . Como se puede ver en la descripcin del algoritmo, las transiciones totales o incompleta dar lugar a distintas ramas del algoritmo. Transiciones continuas se llama as porque, despus de haber aparecido por primera vez, nunca va a cambiar. En contraste, las transiciones discontinuas puede ser cambiado mediante la adicin de nuevas letras a la lnea (puede cambiar el final del arco de transicin). Para evitar ambigedades, una lnea que queremos decir la lnea que se construy para la mquina antes de aadir el sufijo del carcter actual . El algoritmo comienza con el hecho de que estamos creando un nuevo estado , que coincidir con la cadena completa . Est claro por qu tenemos que crear un nuevo estado -, porque con la adicin de un nuevo carcter, una nueva clase de equivalencia - una clase de lneas que terminan en smbolo aadido . Despus de crear un nuevo estado del algoritmo pasa a travs de los enlaces de sufijos a partir de una posicin que corresponde a toda la cadena , y trata de aadir una transicin en el smbolo del estado . Por lo tanto, se le asigna a cada cadena sufijo smbolo . Sin embargo, para aadir nuevas transiciones, slo podemos, si es que no entren en conflicto con los actuales, tan pronto como nos encontramos con carcter ya existente de la transicin , que debe detenerse de inmediato. El caso ms simple - si se ha llegado a un estado ficticio , sumando todos los nuevos personajes a lo largo de la transicin . Esto significa que el carcter de la cadena no haya cumplido. Hemos agregado con xito todas las transiciones, slo ponemos el enlace de abajo el sufijo del Estado - que es, obviamente, debe ser igual , porque como en este caso, coincide con todos los sufijos de una cadena . El segundo caso -, cuando nos topamos con una transicin existente . Esto significa que hemos tratado de aadir una lnea a la mquina (donde - un sufijo de una cadena que tiene una longitud ), y esta lnea se ha agregado previamente a la mquina (es decir, la cadena ya est incluido como una subcadena en una cadena ). Puesto que suponemos que el autmata de la cadena se construye correctamente, las nuevas transiciones no tenemos que aadir. Sin embargo, la dificultad surge con el fin de mantener el enlace sufijo del estado en un estado en el que la lnea ms larga ser exactamente el mismo , que . Tenemos que enlace el sufijo este estado debe ser igual

. Sin embargo, tal estado no podra existir: en este caso, tenemos que hacer una "divisin" del Estado. Por lo tanto, un escenario posible, la transicin es continua, es decir . En este caso, todo es simple, no hay divisin, no es necesario hacer, y que slo llevan el sufijo en el vnculo de un estado a otro . Otra versin, ms compleja - cuando la transicin discontinua, es decir . Esto significa que el Estado no slo cumple con nuestra deseada subcadena de longitud , sino tambin una subcadena de mayor longitud. No tenemos ms remedio que hacer una "divisin" de la situacin : segmento de lnea discontinua, lo que corresponde a sus dos subsegmentos, por lo que el primero va a terminar slo el tiempo . Cmo hacer un split? Vamos a "clonar" el estado , por lo que es una copia del parmetro . Copiamos en el de todas las transiciones, ya que no queremos de ninguna

e-maxx.ru/algo/suffix_automata

6/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

manera a cambiar la forma de pasar a travs . Sufijo enlace desde edad, de sufijo , y el enlace de la enviar a . Despus de la clonacin, nos dedicamos a realizar el enlace de sufijo de clonado.

all estamos, donde dirigi el enlace de una - algo por lo que hemos

Paso final - para redirigir algunos de los miembros de las transiciones al redireccionar a . Que las transiciones de entrada debe redirigir? Baste para redirigir slo las transiciones correspondientes a todos los sufijos de lnea , es decir, Debemos seguir avanzando en los enlaces de sufijos a partir de la parte superior , y hasta que lleguemos al estado de un ficticio o no llegar al estado, la transicin de un estado del que es diferente .

La prueba de la serie lineal de las operaciones


En primer lugar, por mencionar, creemos que el tamao del alfabeto constante . Si no es as, hablar sobre el trabajo de tiempo lineal no funciona: la lista de transiciones de un vrtice que se almacena en un rbol B permite una rpida bsqueda por clave, y aadir la clave. Por lo tanto, si se denota el tamao del alfabeto, entonces el comportamiento asinttico del algoritmo ser en la memoria. Sin embargo, si el alfabeto es lo suficientemente pequeo, podemos, sacrificando la memoria, evitar las listas equilibradas, y almacenar las transiciones en cada nodo como una matriz de longitud (para una bsqueda rpida en la tecla) y una lista dinmica (para un rpido recorrido de todas las claves disponibles). Por lo tanto se llega el momento del algoritmo, pero a costa de consumo de memoria. Por lo tanto, se asume un tamao del alfabeto constante, es decir, Cada operacin de bsqueda para mover al personaje, aadiendo una transicin, en busca de la siguiente jugada - todas estas operaciones, creemos en el trabajo . Si tenemos en cuenta todas las partes del algoritmo, cuenta con tres asientos, el comportamiento asinttico lineal no es obvia: En primer lugar - es paso a travs de los enlaces de sufijos del estado personaje . El segundo lugar - a clonar las transiciones de estado a un nuevo estado El tercer lugar - redirigir las transiciones, lo que lleva el . con la adicin de los bordes del .

Utilizamos el hecho bien conocido que el tamao del sufijo autmata (tanto en el nmero de estados, y el nmero de transiciones) es lineal . (La prueba de la linealidad en el nmero de estados es el propio algoritmo, y la prueba es lineal en el nmero de transiciones, damos a continuacin, despus de la implementacin del algoritmo.). Entonces, obviamente, la suma lineal de el comportamiento asinttico del primer y segundo lugar : para cada operacin es automtica, aade una nueva transicin. Queda por estimar el comportamiento asinttico del total en el tercer lugar - de hecho, en la que redirigir las transiciones, lo que lleva el . Denotamos . Este sufijo es una cadena , y con cada iteracin disminuye la longitud - y, por lo tanto, la posicin de una cadena sufijo aumenta montonamente con cada iteracin. Sin embargo, si antes de la primera iteracin de la lnea de bucle correspondiente fue a una profundidad de ( ) de (si se cuenta la profundidad del nmero de enlaces de sufijos, que tienen que pasar), y despus de la ltima iteracin de la lnea ser el sufijo se refiere a la ruta desde (que se convertir en el nuevo valor ). As, cada iteracin de este ciclo conduce al hecho de que la posicin de una cadena como un sufijo de toda la fila actual se montonamente creciente. En consecuencia, slo este ciclo no podra funcionar ms iteraciones, segn sea necesario . (Vale la pena sealar que los argumentos similares pueden ser utilizados para probar la linealidad del primer lugar, en lugar de referirse a la prueba de la linealidad del nmero de estados.)

La implementacin del algoritmo


En primer lugar, se describe una estructura de datos que almacenar toda la informacin sobre la transicin en particular ( , , la lista de las transiciones). Si es necesario, aqu se puede aadir un terminal de la bandera, as como otra informacin requerida. Lista de las transiciones que tenemos como un contenedor estndar que le permite alcanzar un total de memoria y tiempo de procesamiento a travs de la lnea. s t r u c ts t a t e{ i n tl e n ,l i n k ; m a p < c h a r , i n t >n e x t ; } ;

e-maxx.ru/algo/suffix_automata

7/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

El sufijo propio autmata se almacenan en una matriz de estas estructuras . Como resultado, en la seccin siguiente, si - es la longitud mxima posible de la cadena en el programa, es suficiente para tener una memoria para el estados. Adems, almacenamos una variable - estado que corresponde a toda la lnea en este momento. c o n s ti n tM A X L E N=1 0 0 0 0 0 ; s t a t es t [ M A X L E N * 2 ] ; i n ts z ,l a s t ; Esta es la funcin que inicializa el sufijo autmata (la creacin de un autmata con un estado inicial individual): v o i ds a _ i n i t ( ){ s z=l a s t=0 ; s t [ 0 ] . l e n=0 ; s t [ 0 ] . l i n k=1 ; + + s z ; / * / / , : f o r( i n ti = 0 ;i < M A X L E N * 2 ;+ + i ) s t [ i ] . n e x t . c l e a r ( ) ; * /

Finalmente, se presenta la aplicacin de las funciones bsicas - que aade otro personaje al final de la lnea actual, la reconstruccin de la mquina adecuada: v o i ds a _ e x t e n d( c h a rc ){ i n tc u r=s z + + ; s t [ c u r ] . l e n=s t [ l a s t ] . l e n+1 ; i n tp ; f o r( p = l a s t ;p ! = 1& &! s t [ p ] . n e x t . c o u n t ( c ) ;p = s t [ p ] . l i n k ) s t [ p ] . n e x t [ c ]=c u r ; i f( p= =1 ) s t [ c u r ] . l i n k=0 ; e l s e{ i n tq=s t [ p ] . n e x t [ c ] ; i f( s t [ p ] . l e n+1= =s t [ q ] . l e n ) s t [ c u r ] . l i n k=q ; e l s e{ i n tc l o n e=s z + + ; s t [ c l o n e ] . l e n=s t [ p ] . l e n+1 ; s t [ c l o n e ] . n e x t=s t [ q ] . n e x t ; s t [ c l o n e ] . l i n k=s t [ q ] . l i n k ; f o r( ;p ! = 1& &s t [ p ] . n e x t [ c ] = = q ;p = s t [ p ] . l i n k ) s t [ p ] . n e x t [ c ]=c l o n e ; s t [ q ] . l i n k=s t [ c u r ] . l i n k=c l o n e ; } } l a s t=c u r ; } Como se mencion anteriormente, si se sacrifica la memoria (hasta donde - el tamao del alfabeto), se puede llegar a la hora de construir la mquina , incluso para todos -, sino que tendr en cada estado para almacenar una matriz de tamao (para encontrar rpidamente la transicin a la letra deseada) y una lista de todas las transiciones (para un paseo rpido y copiar todas las transiciones).

Propiedades adicionales de sufijo de autmata


El nmero de estados
El nmero de estados en el sufijo autmata construido para la cadena de longitud , no ms de (a ).

e-maxx.ru/algo/suffix_automata

8/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin El nmero de estados en el sufijo autmata construido para la cadena de longitud , no ms de

(a

).

Prueba de ello es el algoritmo descrito anteriormente (como originalmente mquina consta de un estado inicial nico, los pasos primero y segundo se aade a exactamente un estado, pero en cada uno de los otros pasos se podran aadir a dos picos debido a la divisin del estado). Sin embargo, esta estimacin es fcil de mostrar, sin el conocimiento del algoritmo . Recurdese que el nmero de estados igual al nmero de diferentes conjuntos de valores . Adems, estos conjuntos forman un rbol en el principio de "arriba-los padres contiene un subconjunto de todos los nios." Considere el rbol y transformarlo un poco: si bien tiene un vrtice interior y con un hijo, significa que ese hijo no contiene al menos un nmero de la matriz, a continuacin, crear un virtual vrtice es igual a este nmero, y el aumento de peso del hijo al la matriz. Como resultado, se obtiene un rbol donde cada vrtice interno tiene un grado mayor que uno, y el nmero de hojas no exceda . Por consiguiente, slo como un rbol de no ms de la parte superior. As, hemos demostrado que la evaluacin independiente, sin conocimiento del algoritmo. Es interesante notar que esta estimacin es agudo, es decir hay una prueba en la que se consigue . Esta prueba es como sigue:

Al manejar esta lnea para cada iteracin, comenzando con la tercera, ser dividir el estado y, por tanto, se puede llegar puntuacin .

El nmero de transiciones
El nmero de transiciones en el sufijo autmata construido para la cadena de longitud , no ms de Vamos a demostrar que. Estimamos que el nmero de transiciones continuas. Considere la posibilidad de un rbol de expansin de las ms largas trayectorias en el autmata, comienza en el estado . Este marco estar compuesto por slo bordes slidos, y por lo tanto su nmero es uno menos que el nmero de estados, es decir, no exceda . En este momento calculamos el nmero de transiciones incompletas. Considere la posibilidad de cada transicin discontinua, y dejar que la actual transicin - una transicin para el smbolo . Lo pusimos en la cadena de bsqueda , donde la cadena es la longitud de la ruta desde el estado inicial , y - muy lejos de cualquier terminal en el estado. Por un lado, todas estas lneas para todas las transiciones no continuos son diferentes (como una cadena , y se forman slo por transiciones slidos). Por otro lado, cada una de estas lneas , por la definicin de enfermedad terminal, el sufijo es toda la lnea . Como sufijos no vacas de una cadena de piezas y, adems, toda la fila de estas lneas no poda estar contenido (como toda la lnea corresponde a la trayectoria de bordes slidos), el nmero total de no continuas transiciones no exceda . La adicin de estas dos estimaciones, se obtiene la estimacin . Sin embargo, recordando que el nmero mximo de estados slo se consigue en el formulario de la prueba y la puntuacin que claramente no se alcanza, se obtiene una evaluacin final , segn sea necesario. Es interesante hacer notar que existe tambin un ensayo en la que se obtiene esta estimacin : (a ).

La comunicacin con el rbol de sufijos. La construccin de rbol de sufijos para el sufijo autmata y viceversa
Probamos dos teoremas que establecen la relacin mutua entre el autmata y el sufijo rbol de sufijos . Por mencionar, que creemos que la cadena de entrada es tal que cada vrtice tiene su propio sufijo en el rbol de sufijo (como por cadenas arbitrarias, no es generalmente cierto: por ejemplo, una cadena ). Esto generalmente se trat mediante la asignacin al final de cualquier carcter particular (denotado generalmente por un signo de dlar). Para mayor comodidad, introducimos la siguiente notacin: - una cadena escrita en orden inverso autmata construido para la lnea , - un rbol de sufijos de lnea . - el sufijo

Se introduce el concepto de ampliar los vnculos , fijar la parte superior del rbol de sufijos y un smbolo , a continuacin, extender el vnculo lleva a la cima del rbol correspondiente a la lnea (si la ruta termina en el centro del borde, a continuacin, dibuje un enlace en el extremo inferior de la costilla), y si ese camino no existe en el rbol, se expande a continuacin referencia no se define. En un sentido, que se extiende en los enlaces opuestos enlaces sufijo. Teorema 1 . El rbol formada por eslabones sufijo es un rbol de sufijos .

e-maxx.ru/algo/suffix_automata

9/18

08/08/12

Teorema 1 . El rbol formada por eslabones sufijo Teorema 2 . en

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

es un rbol de sufijos

. . Adems, los bordes slidos -

- Un grfico de los vnculos que se extienden rbol de sufijos - se invierte enlaces sufijo .

Estos dos resultados permiten una estructura (rbol de sufijos o sufijo autmata) para construir otro en el tiempo estos dos algoritmos simples sern discutidos por debajo de nosotros en los teoremas 3 y 4. Para mayor claridad, se presenta el sufijo autmata con sus vnculos con el sufijo del rbol y el rbol de sufijo correspondiente a la fila de arriba abajo. Por ejemplo, tomar la lnea . el sufijo rbol y sus enlaces (para mayor claridad, hemos estado a firmar cada lnea):

e-maxx.ru/algo/suffix_automata

10/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Lema . Los siguientes tres afirmaciones son equivalentes para las dos subseries , y en una fila en una fila y se encuentran en el mismo camino desde la raz hasta el rbol de sufijos

La prueba de ello es bastante obvia: si el inicio de las apariciones de las dos lneas coinciden, entonces una cadena es un prefijo de otro, lo que significa que una lnea se encuentra en un rbol de sufijos en el camino de otra cadena. La prueba del teorema 1 . Los estados del autmata se corresponden con los vrtices del rbol de sufijos sufijo. Considere la posibilidad de un enlace el sufijo . De acuerdo con la definicin de vnculos sufijo un sufijo , y entre todas stas se selecciona la que tiene el mejor. es

En trminos de la fila invertida , esto significa que el enlace sufijo lleva a un prefijo ms largo de una cadena que corresponde al estado de prefijo de esta lnea con un estado independiente . En otras palabras, el vnculo sufijo que lleva a los ancestros de las tapas en el rbol de sufijos, segn sea necesario. La prueba del teorema 2 . Los estados del autmata se corresponden con los vrtices del rbol de sufijos sufijo. Considere la posibilidad de un cambio arbitrario en el sufijo autmata . La presencia de esta transicin significa que - es una condicin, la clase de equivalencia que contiene la subcadena . En la fila invertida , esto significa que es una condicin que corresponde a la coincidencia, de la cual (en el texto ) es la subcadena desde . Slo significa que:

La primera parte del teorema, queda por demostrar la segunda parte: que todas las transiciones de slidos en el autmata corresponden a los enlaces de sufijos en el rbol. El cambio continuo de parcial difieren de que , esto es, Despus de asignar un smbolo , estamos en un estado con una cadena, el mximo de la clase de equivalencia de este estado. Esto significa que en el clculo de los enlaces correspondientes en expansin , inmediatamente alcanz la cima del rbol, en lugar de ir hasta el nodo de rbol ms cercano. Por lo tanto, la asignacin de un personaje al principio, llegamos a la parte superior de otro rbol - por lo que si este es el link sufijo en un rbol invertido. El teorema est demostrado. Teorema 3 . Con un sufijo autmata Teorema 4 . Con el rbol de sufijos Demostracin del teorema 3 . rbol sufijo contendr el mismo nmero de vrtices, como en los estados resultante del estado de la autmata corresponde a la longitud de la cadena , y la parte superior del rbol, . puede ser un tiempo puede ser un tiempo para construir un rbol de sufijos para construir un sufijo autmata . .

De acuerdo con el teorema 1, los bordes del rbol se forman como enlaces sufijo invertidas, y las etiquetas de arco se puede encontrar en la base de la diferencia entre los estados y el conocimiento adicional para cada mquina de estado cualquier elemento uno de su conjunto (esto es un elemento del conjunto puede ser mantenido en la construccin de la mquina). Enlaces sufijo en el rbol, se puede construir, de acuerdo con el teorema 2: es suficiente para ver todas las transiciones continuas en la mquina, y por cada movimiento como para aadir un enlace . Por lo tanto, con el tiempo, podemos construir un rbol de sufijos con los enlaces en el mismo sufijo.

(Si tenemos en cuenta el tamao del alfabeto no es constante, entonces toda la reconstruccin tomar tiempo .)
e-maxx.ru/algo/suffix_automata 11/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

.) Demostracin del Teorema 4 . Sufijo autmata larga que contienen los mismos estados como vrtices que coincida con la ruta invertida desde la raz hasta el pice . . En cada estado, la cadena ms

De acuerdo con el teorema 2, la construccin de todas las transiciones en el sufijo autmata, tenemos que encontrar todos los enlaces se extienden . En primer lugar, tenga en cuenta que algunos de estos vnculos se extienden obtenida directamente de los enlaces en el rbol de sufijos. De hecho, si por cualquier vrtice , consideramos su enlace sufijo , significa que es necesario enlace se extiende hacia fuera a la primera cadena de caracteres correspondiente al vrtice . Sin embargo, puesto que encontramos se extienden a todos los enlaces. Adems, deben pasar por el rbol de sufijos de la hoja a la raz, y para cada vrtice vista de todos sus hijos, cada hijo de expansin de ver todos los enlaces y copiar el enlace en la parte superior , si este smbolo en un enlace de la parte superior no se ha encontrado:

Este proceso se ejecuta durante un tiempo

, si se asume un tamao del alfabeto constante.

Finalmente, queda por construir los enlaces de sufijos en la mquina, sin embargo, de acuerdo con el teorema 1, los enlaces de sufijos se obtienen simplemente como rbol de sufijos bordes . As, el algoritmo en un tiempo mquina para construir rbol sufijo sufijo para la fila de arriba abajo.

(Si creemos que el tamao del alfabeto - como una variable, entonces aumentar al comportamiento asinttico .)

Las aplicaciones en la solucin de problemas


Vamos a ver qu se puede hacer utilizando el sufijo autmata. Por simplicidad, suponemos que el tamao del alfabeto constante, lo que nos permitir tener en cuenta el comportamiento asinttico de la construccin del sufijo autmata y pasa por encima const.

Compruebe la entrada
Condicin . Teniendo en cuenta el texto o no la cadena en el texto , y hay peticiones en la forma: dada una cadena , que desea comprobar si es

como una subcadena. y la en el tiempo solicitud de una. .

Asinttica . Preprocesamiento Solucin . Construir el sufijo autmata del texto

Como es ahora para responder a una peticin. Que el estado actual - es una variable , inicialmente es igual al estado inicial . Vamos a ir en lnea de caracteres , muy apropiadamente para hacer la transicin de su estado actual a un nuevo estado. Si en algn momento sucedi que la transicin del estado actual del carcter que desea que result - la respuesta a la consulta "no". Si no somos capaces de procesar toda la cadena , entonces la respuesta a la consulta "s". Es claro que esto va a funcionar por el momento . Adems, el algoritmo est en realidad en busca de una longitud de prefijo naidlinneyshego ocurriendo en el texto - y si los patrones de entrada son tales que estas longitudes son pequeas, entonces el algoritmo se ejecutar mucho ms rpido sin procesar toda la lnea en su conjunto.

El nmero de subcadenas distintas


Condicin . Dada una cadena Asinttica . . . . Quieres saber el nmero de subcadenas diferentes.

Solucin . Construimos un sufijo autmata en la lnea

En el sufijo autmata de cualquier subcadena coincide con una ruta de acceso en la mquina. Debido a que las filas duplicadas en la mquina no puede ser la respuesta al problema - es el nmero de maneras diferentes en la mquina, comenzando en el vrtice inicial . Dado que el sufijo autmata es un grfico acclico, el nmero de maneras diferentes que puede asumir usando

e-maxx.ru/algo/suffix_automata

12/18

08/08/12

Dado que el sufijo autmata es un grfico acclico, el nmero de maneras diferentes que puede asumir usando programacin dinmica. Es decir, vamos - De cuntas maneras diferentes, empezando por el estado (incluyendo la longitud del camino de cero). Entonces tenemos:

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

es decir,

puede expresarse como la suma de las respuestas para todas las posibles transiciones de estado . (la unidad es quitado, hacer caso omiso de la cadena vaca).

La respuesta al problema ser el valor

La longitud total de subcadenas diferentes


Condicin . Dada una cadena Asinttica . . . Quieres saber la longitud total de todas sus subcadenas diferentes.

Solucin . Solucin del problema similar al anterior, pero ahora debe ser considerada en la dinmica de las dos cantidades: el nmero de subcadenas distintas y su longitud total . Cmo contar , descrito en el problema anterior, y la cantidad se puede calcular como sigue:

es decir, tomamos la respuesta para cada vrtice cada lnea de un carcter.

, y aadir a ella

, por lo tanto, como se atribuye al comienzo de

Lexicogrfico k-simo subcadena


Condicin . Dada una cadena cadena para . Asinttica . tamao del alfabeto). . Ha habido peticiones: el nmero en una consulta (donde y la necesidad de encontrar en la lnea de tipo - el

- es la respuesta a esta pregunta

Solucin . La solucin a este problema se basa en la idea de los mismos que los anteriores dos tareas. Lexicogrfico subcadena - un lexicogrfico ruta-simo en el sufijo autmata. Por lo tanto, teniendo en cuenta para cada estado el nmero de maneras de salir de ella, podemos encontrar fcilmente camino XX, pasando de la raz de la mquina.

El ms pequeo cambio cclico


Condicin . Dada una cadena Asinttica . . . Entonces, esta mquina va a contener una ruta cclica . Requerido para encontrar el ms mnimo lexicogrfico de su cambio cclico.

Solucin . Construimos un sufijo autmata para las cadenas todos los turnos de la lnea .

Por lo tanto, el problema se reduce a la que se encuentra en la longitud de la mquina ruta lexicogrfico mnima , que es una manera trivial: empezamos en el estado inicial y el tiempo de cada acto con avidez, la transmisin de la transicin, con carcter mnimo.

Nmero de apariciones
Condicin . Teniendo en cuenta el texto , y hay peticiones en la forma: dada una cadena la lnea est incluida en el texto como una subcadena (ocurrencias pueden solaparse). Asinttica . Preprocesamiento Solucin . Construir el sufijo autmata del texto y la . solicitud de una. , quiere saber cuntas veces

Lo siguiente que necesitamos hacer esto preprocesamiento: para cada estado de la mquina para contar el nmero igual al tamao del conjunto . De hecho, todas las filas que se corresponden con el mismo estado, son el mismo nmero de veces igual al nmero de posiciones en el conjunto .

e-maxx.ru/algo/suffix_automata

13/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Sin embargo, apoyan claramente el conjunto de slo su tamao . cuentan), en un principio asignar longitud y se reenva el valor actual

todos los estados, no podemos, por tanto, aprender a considerar , tambin no

Para ello, haga lo siguiente. Para cada Estado que, a menos que se obtuvo por clonacin (y el estado inicial

. A continuacin vamos a repasar todos los estados en orden decreciente de su para el enlace de sufijo:

Sostuvo que, al final, tanto el recuento de cada Estado, los valores correctos

Por qu es esto cierto? Estados totales obtenidos por clonacin no es, exactamente , y de ellos apareci cuando se aadi el primer carcter. En consecuencia, cada uno de estos estados que asociamos esta posicin, el procesamiento de los cuales apareci. Por lo tanto, inicialmente, cada uno de los estados , y en todos los dems estados . Luego llevamos a cabo para cada operacin de este tipo: . La razn de esto es que si la cadena correspondiente al estado de reuniones, veces, entonces todos sus sufijos se encontrar con el mismo. Por lo tanto no tomamos en cuenta la misma posicin un par de veces? Debido al valor de cada estado "el envo de una" una sola vez, por lo que podra ocurrir que uno de su estado a "atravesar" a otro estado dos veces, de dos maneras diferentes. Por lo tanto, hemos aprendido a tomar estos valores para todos los estados del autmata. en - el estado correspondiente al

Despus de eso, la respuesta a una pregunta es trivial - que acaba de regresar modelo .

La posicin de la primera ocurrencia


Condicin . Teniendo en cuenta el texto , y hay peticiones en la forma: dada una cadena posicin de la primera aparicin de la cadena . Asinttica . Preprocesamiento Solucin . Construir el sufijo autmata del texto y la . solicitud de una. , que desea conocer la

Para solucionar este problema tambin tenemos que aadir un pre-procesamiento de encontrar posiciones para todos los estados del autmata, es decir, para cada estado, queremos encontrar la posicin de final de la primera aparicin. En otras palabras, queremos encontrar de antemano el elemento mnimo de cada uno de los juegos (porque, obviamente, apoyar a todos los conjuntos , no podemos). Para mantener esta posicin cuando creamos un nuevo estado con mayor facilidad directamente en el curso de la construccin de la mquina, al iniciar una funcin , a continuacin, lo expondra

(Si se trabaja en la indexacin). Clonacin de los picos en que ponemos:

(Como otro valor de opcin, slo una - es Por lo tanto, la respuesta a una solicitud - es slo modelo .

que con mayor claridad.) que - el estado correspondiente al

Las posiciones de todas las ocurrencias


Condicin . Teniendo en cuenta el texto , y hay peticiones en la forma: dada una cadena posiciones de todas las apariciones de la cadena (de entrada pueden superponerse). , que desea mostrar las

Asinttica . Preprocesamiento . Respuesta a una Solicitud de , donde - es el tamao de la respuesta, es decir, Vamos a resolver el problema en orden de tiempo de la entrada y salida. Solucin . Construir el sufijo autmata del texto . Del mismo modo, el problema anterior, calcular el proceso de construccin de un autmata para cada posicin de estado al final de la primera aparicin.

e-maxx.ru/algo/suffix_automata

14/18

08/08/12

construccin de un autmata para cada posicin de estado Supongamos ahora que la solicitud - la lnea

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

al final de la primera aparicin.

. Vamos a averiguar qu estado le corresponde.

Es evidente que slo debe ser la respuesta. Qu otros puestos hay que encontrarlo? Hemos utilizado la mquina del Estado que contiene una cadena , pero no toma en cuenta otras condiciones que corresponden a estas lneas, que es su sufijo. En otras palabras, queremos encontrar todos los estados de la cual los vnculos sufijo es factible para el estado . Por lo tanto, para resolver el problema que tenemos que ahorrar para cada estado una lista de enlaces que conducen a que el sufijo. La respuesta a la pregunta entonces ser para hacer una ronda de profundidad / ancho, el sufijo invertido en estos enlaces, empezando por el estado . Esta desviacin funcionar durante , porque no visitar el estado dos veces la misma (debido a la situacin de cada enlace el sufijo fluye en una sola, por lo que no puede haber dos caminos que conducen al mismo estado). Sin embargo, debemos tener en cuenta que los dos estados de los valores puede ser el mismo : si un Estado se ha obtenido mediante la clonacin de la otra. Sin embargo, esto no afecta el comportamiento asinttico, puesto que cada tapas no clonados pueden ser de un mximo de un clon. Por otra parte, uno puede fcilmente deshacerse de la retirada de los elementos repetidos, si no aadimos la respuesta del Estado-clones. De hecho, en cualquier estado-clon tiene enlace sufijo desde el estado inicial, que es una condicin clonado. Por lo tanto, si tenemos en cuenta el estado de cada indicador , y no se sumar a la respuesta de los estados para los que , de este modo, obtener todos los necesarios elementos sin repeticiones. He aqu un esbozo de la aplicacin: s t r u c ts t a t e{ . . . b o o li s _ c l o n ; i n tf i r s t _ p o s ; v e c t o r < i n t >i n v _ l i n k ; } ; . . . . . . f o r( i n tv = 1 ;v < s z ;+ + v ) s t [ s t [ v ] . l i n k ] . i n v _ l i n k . p u s h _ b a c k( v ) ; . . . / / - ( , ) v o i do u t p u t _ a l l _ o c c u r e n c e s( i n tv ,i n tP _ l e n g t h ){ i f( !s t [ v ] . i s _ c l o n ) c o u t< <s t [ v ] . f i r s t _ p o s-P _ l e n g t h+1< <e n d l ; f o r( s i z e _ ti = 0 ;i < s t [ v ] . i n v _ l i n k . s i z e ( ) ;+ + i ) o u t p u t _ a l l _ o c c u r e n c e s( s t [ v ] . i n v _ l i n k [ i ] ,P _ l e n g t h ) ; }

Encuentra la lnea ms corta no est incluido en este


Condicin . Dada una cadena , y se puso a un alfabeto especfico. Necesario para encontrar una lnea de longitud mnima de que no ocurre en una subcadena. Asinttica . La decisin es . .

Solucin . Va a resolver la programacin dinmica en la mquina, construida para la lnea

Supongamos que - es la respuesta para la parte superior , es decir, Ya hemos ganado algo de subcadena, poder y quiere encontrar el nmero mnimo de caracteres que hay que aadir el fin de ir ms all de la mquina, la bsqueda de la transicin no existe. Se considera muy fcil. Si desde all pasar al menos un carcter del alfabeto, entonces un smbolo a ir ms all de la mquina, obteniendo as una cadena de bsqueda. : podemos asignar

De lo contrario, el mismo smbolo que no funcionan, por lo que hay que tener un mnimo de las respuestas a todo tipo de personajes:

e-maxx.ru/algo/suffix_automata

15/18

08/08/12

personajes:

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

La respuesta al problema ser igual , y la misma lnea se puede restaurar mediante la restauracin de la manera en que la dinmica ha convertido este mnimo.

Naidlinneyshaya subcadena comn de dos cadenas


Condicin . Dadas dos cadenas y lnea , es una subcadena, y , y . Asinttica . La decisin es Solucin . Construimos un sufijo autmata en la lnea . . Se necesita para encontrar su subcadena naidlinneyshuyu comn, es decir, esta .

Ahora vamos en la lnea y para cada sufijo prefijo naidlinneyshy busca de este prefijo, que se encuentra en el . En otras palabras, tenemos que para cada posicin en la cadena que desea encontrar un comn subcadena naidlinneyshuyu , y que termina es en esta posicin. Para ello, mantenemos dos variables: estado actual y la longitud actual . Estas dos variables se describir la parte actual coincidiendo: su longitud y condicin, que corresponde a la misma (sin longitud de almacenamiento no puede evitarse, porque un estado puede corresponder a varias cadenas de diferentes longitudes). Inicialmente , es decir coincidir con vaco. y quiere convertir la respuesta para l. , entonces simplemente realizar esta transicin, y

Ahora vamos a considerar el carcter

Si el estado de la autmata es una transicin para el smbolo aumentar por una.

Sin embargo, si desde el Estado no est obligado por la transicin, debemos tratar de acortar la parte corriente de coincidir, para lo cual tenemos que pasar en el enlace de sufijo:

En este caso la longitud actual debe ser acortado, pero deja el mximo posible. Obviamente, esto se debe establecer , ya que despus de la aprobacin del sufijo nos volver a unir para cumplir con la subcadena de cualquier longitud, correspondiendo a este estado:

Si el nuevo estado de la nueva no se mover hasta el carcter deseado, a continuacin, de nuevo tenemos que pasar en el enlace y reducir el sufijo , y as sucesivamente, hasta que encontremos la transicin (y vaya al paso 1) o no vamos a entrar en el estado simulado (lo que significa que smbolo no se produce en lo que la asignacin y pasar a la siguiente ). La respuesta al problema sera el mximo de los valores para todo el tiempo. Asinttica de este pasaje es porque en un solo movimiento, se puede aumentar por uno , o hacer varias pasadas a travs del enlace sufijo, cada una de ellas seriamente reducir el valor . Por lo tanto, las reducciones podra ser mayor , lo que significa que el comportamiento asinttico lineal. Implementacin: s t r i n gl c s( s t r i n gs ,s t r i n gt ){ s a _ i n i t ( ) ; f o r( i n ti = 0 ;i < ( i n t ) s . l e n g t h ( ) ;+ + i ) s a _ e x t e n d( s [ i ] ) ; i n tv=0 , l=0 , b e s t=0 , b e s t p o s=0 ; f o r( i n ti = 0 ;i < ( i n t ) t . l e n g t h ( ) ;+ + i ){ w h i l e( v& &!s t [ v ] . n e x t . c o u n t ( t [ i ] ) ){ v=s t [ v ] . l i n k ; l=s t [ v ] . l e n g t h ; } i f( s t [ v ] . n e x t . c o u n t ( t [ i ] ) ){

e-maxx.ru/algo/suffix_automata

16/18

08/08/12

Mxima algoritmos ::e sufijo autmata. Construccin i f:: ( s t [ v ] . n x t . c o u n t ( t [ i ] ) ) { y aplicacin

} r e t u r nt . s u b s t r( b e s t p o s b e s t + 1 ,b e s t ) ;

} i f( l>b e s t ) b e s t=l , b e s t p o s=i ;

v=s t [ v ] . n e x t [ t [ i ] ] ; + + l ;

Subcadena ms comn de unas pocas lneas.


Condicin . La carta de las cadenas . Se necesita para encontrar su subcadena naidlinneyshuyu comn, es decir, esta lnea , es una subcadena de todos . Asinttica . La decisin es . de su propio carcter

Solucin . Cosemos todas las filas en una sola lnea , atribuyendo despus de cada lnea delimitador (por ejemplo, al escribir caracteres especiales adicionales. ):

Construimos la cadena

sufijo autmata.

Ahora queremos encontrar una lnea como esta en la mquina, que se encuentra en todas las lneas , y esto nos va a ayudar a las especias. personajes. Tenga en cuenta que si una subcadena est contenida en alguna lnea , entonces el sufijo autmata de la subcadena que existe una ruta que contiene un carcter , y no contiene otros personajes . Por lo tanto, tenemos que calcular la cobertura: por cada mquina de estados y cada personaje tiene una manera de contener un separador , y no incluye otros separadores. Es fcil pasar por alto la profundidad / ancho, o la dinmica de perezosos. Despus de eso, la respuesta al problema ser una lnea para el estado , de la que se encontraron caminos para todos los personajes.

Problemas en los jueces de lnea


Las tareas que se pueden resolver con la ayuda del sufijo autmata: SPOJ # 7258 SUBLEX "lexicogrfica bsqueda de la subcadena" [Dificultad: Media]

Literatura
En primer lugar, presentar una lista de los primeros estudios relacionados con autmatas sufijo: A. Blumer, J. Blumer, A. Ehrenfeucht, D. Haussler, R. McConnell. lineal Tamao autmatas finitos para el conjunto de todos los Subwords de una palabra. Un bosquejo de los resultados [de 1983] A. Blumer, J. Blumer, A. Ehrenfeucht, D. Haussler. El ms pequeo autmata Reconociendo las Subwords de un texto [1984] Maxime Crochemore. Transductores ptimas de factores [1985] Maxime Crochemore. Transductores y Repeticiones [1986] A. Nerode. Autmata transformaciones lineales [1958] Adems, las fuentes ms recientes de este tema se trata en muchos libros sobre algoritmos de cadenas: Maxime Crochemore, Rytter Wowjcieh. Joyas de Stringology [2002] Bill Smyth. Patrones de Informtica en las cadenas [de 2003] Bill Smith. mtodos y algoritmos de clculos en las cadenas [de 2006]

e-maxx.ru/algo/suffix_automata

17/18

08/08/12

Mxima :: algoritmos :: sufijo autmata. Construccin y aplicacin

Como

8 personas les ha gustado.

Aadir nuevo comentario


Type your comment here.

Imagen

Publicar como ...

Mostrando 1 comentario
Ordenar por Popular hoy Suscribirse por E-mail Suscribirse por RSS

Ivn Nikulin

hace 4 das

Cmo restaurar el estado de la terminal?


Como Responder

e-maxx.ru/algo/suffix_automata

18/18

También podría gustarte