Autómata de sufijo

Autómata finito determinista que acepta el conjunto de todos los sufijos de una cadena particular

Autómata de sufijo
TipoÍndice de subcadena
Inventado1983
Inventado porAnselmo Blumer; Janet Blumer; Andrzej Ehrenfeucht ; David Haussler ; Ross McConnell
Complejidad temporal en notación O grande
OperaciónPromedioPeor de los casos
Complejidad espacial
Espacio Oh ( norte ) {\displaystyle O(n)} Oh ( norte ) {\displaystyle O(n)}

En informática , un autómata de sufijo es una estructura de datos eficiente para representar el índice de subcadena de una cadena dada que permite el almacenamiento, procesamiento y recuperación de información comprimida sobre todas sus subcadenas . El autómata de sufijo de una cadena es el grafo acíclico dirigido más pequeño con un vértice inicial dedicado y un conjunto de vértices "finales", de modo que las rutas desde el vértice inicial hasta los vértices finales representan los sufijos de la cadena. S {\estilo de visualización S}

En términos de la teoría de autómatas , un autómata de sufijo es el autómata finito determinista parcial mínimo que reconoce el conjunto de sufijos de una cadena dada . El gráfico de estados de un autómata de sufijo se denomina gráfico de palabras acíclico dirigido (DAWG), un término que también se utiliza a veces para cualquier autómata de estado finito acíclico determinista . S = s 1 s 2 s norte {\displaystyle S=s_{1}s_{2}\puntos s_{n}}

Los autómatas de sufijo fueron introducidos en 1983 por un grupo de científicos de la Universidad de Denver y la Universidad de Colorado en Boulder . Sugirieron un algoritmo en línea de tiempo lineal para su construcción y demostraron que el autómata de sufijo de una cadena con una longitud de al menos dos caracteres tiene como máximo estados y como máximo transiciones. Trabajos posteriores han demostrado una estrecha conexión entre los autómatas de sufijo y los árboles de sufijo , y han esbozado varias generalizaciones de los autómatas de sufijo, como el autómata de sufijo compactado obtenido por compresión de nodos con un único arco saliente. S {\estilo de visualización S} 2 | S | 1 {\textstyle 2|S|-1} 3 | S | 4 {\textstyle 3|S|-4}

Los autómatas de sufijo proporcionan soluciones eficientes a problemas como la búsqueda de subcadenas y el cálculo de la subcadena común más grande de dos o más cadenas.

Historia

Anselm Blumer con un dibujo de CDAWG generalizado para las cadenas ababc y abcab

El concepto de autómata de sufijo fue introducido en 1983 [1] por un grupo de científicos de la Universidad de Denver y la Universidad de Colorado en Boulder formado por Anselm Blumer, Janet Blumer, Andrzej Ehrenfeucht , David Haussler y Ross McConnell, aunque conceptos similares se habían estudiado anteriormente junto con árboles de sufijos en los trabajos de Peter Weiner, [2] Vaughan Pratt [3] y Anatol Slissenko . [4] En su trabajo inicial, Blumer et al . mostraron un autómata de sufijo construido para la cadena de longitud mayor que tiene en la mayoría de los estados y en la mayoría de las transiciones, y sugirieron un algoritmo lineal para la construcción de autómatas. [5] S {\estilo de visualización S} 1 {\estilo de visualización 1} 2 | S | 1 {\displaystyle 2|S|-1} 3 | S | 4 {\displaystyle 3|S|-4}

En 1983, Mu-Tian Chen y Joel Seiferas demostraron de forma independiente que el algoritmo de construcción de árboles de sufijos de Weiner de 1973 [2], al construir un árbol de sufijos de la cadena, construye un autómata de sufijos de la cadena invertida como estructura auxiliar. [6] En 1987, Blumer et al . aplicaron la técnica de compresión utilizada en árboles de sufijos a un autómata de sufijos e inventaron el autómata de sufijos compactado, que también se denomina gráfico de palabras acíclico dirigido compactado (CDAWG). [7] En 1997, Maxime Crochemore y Renaud Vérin desarrollaron un algoritmo lineal para la construcción directa de CDAWG. [1] En 2001, Shunsuke Inenaga et al . desarrollaron un algoritmo para la construcción de CDAWG para un conjunto de palabras dado por un trie . [8] S {\estilo de visualización S} S R {\textstyle S^{R}}

Definiciones

Generalmente, cuando se habla de autómatas sufijos y conceptos relacionados, se utilizan algunas nociones de la teoría del lenguaje formal y de la teoría de autómatas , en particular: [9]

  • El "alfabeto" es un conjunto finito que se utiliza para construir palabras. Sus elementos se denominan "caracteres"; Σ {\estilo de visualización \Sigma}
  • "Palabra" es una secuencia finita de caracteres . La "longitud" de la palabra se denota como ; ω = ω 1 ω 2 ω norte {\displaystyle \omega =\omega _{1}\omega _{2}\puntos \omega _{n}} ω {\estilo de visualización \omega} | ω | = norte {\displaystyle |\omega |=n}
  • " Lenguaje formal " es un conjunto de palabras sobre un alfabeto determinado;
  • "El lenguaje de todas las palabras" se denota con el carácter (donde el carácter "*" representa la estrella de Kleene ), "palabra vacía" (la palabra de longitud cero) se denota con el carácter ; Σ {\displaystyle \Sigma ^{*}} ε {\displaystyle \varepsilon }
  • " Concatenación de palabras" y se denota como o y corresponde a la palabra que se obtiene al escribir a la derecha de , es decir, ; α = α 1 α 2 α n {\displaystyle \alpha =\alpha _{1}\alpha _{2}\dots \alpha _{n}} β = β 1 β 2 β m {\displaystyle \beta =\beta _{1}\beta _{2}\dots \beta _{m}} α β {\displaystyle \alpha \cdot \beta } α β {\displaystyle \alpha \beta } β {\displaystyle \beta } α {\displaystyle \alpha } α β = α 1 α 2 α n β 1 β 2 β m {\displaystyle \alpha \beta =\alpha _{1}\alpha _{2}\dots \alpha _{n}\beta _{1}\beta _{2}\dots \beta _{m}}
  • "Concatenación de idiomas" y se denota como o y corresponde al conjunto de concatenaciones por pares ; A {\displaystyle A} B {\displaystyle B} A B {\displaystyle A\cdot B} A B {\displaystyle AB} A B = { α β : α A , β B } {\displaystyle AB=\{\alpha \beta :\alpha \in A,\beta \in B\}}
  • Si la palabra puede representarse como , donde , entonces las palabras , y se denominan "prefijo", "sufijo" y " subpalabra " (subcadena) de la palabra correspondientemente; ω Σ {\displaystyle \omega \in \Sigma ^{*}} ω = α γ β {\displaystyle \omega =\alpha \gamma \beta } α , β , γ Σ {\displaystyle \alpha ,\beta ,\gamma \in \Sigma ^{*}} α {\displaystyle \alpha } β {\displaystyle \beta } γ {\displaystyle \gamma } ω {\displaystyle \omega }
  • Si y (con ) entonces se dice que "ocurre" en como subpalabra. Aquí y se denominan posiciones izquierda y derecha de ocurrencia de en correspondientemente. T = T 1 T n {\displaystyle T=T_{1}\dots T_{n}} T l T l + 1 T r = S {\displaystyle T_{l}T_{l+1}\dots T_{r}=S} 1 l r n {\displaystyle 1\leq l\leq r\leq n} S {\displaystyle S} T {\displaystyle T} l {\displaystyle l} r {\displaystyle r} S {\displaystyle S} T {\displaystyle T}

Estructura del autómata

Formalmente, el autómata finito determinista está determinado por 5-tuplas , donde: [10] A = ( Σ , Q , q 0 , F , δ ) {\displaystyle {\mathcal {A}}=(\Sigma ,Q,q_{0},F,\delta )}

  • Σ {\displaystyle \Sigma } es un "alfabeto" que se utiliza para construir palabras,
  • Q {\displaystyle Q} es un conjunto de " estados " del autómata,
  • q 0 Q {\displaystyle q_{0}\in Q} es un estado "inicial" del autómata,
  • F Q {\displaystyle F\subset Q} es un conjunto de estados "finales" del autómata,
  • δ : Q × Σ Q {\displaystyle \delta :Q\times \Sigma \mapsto Q} es una función de "transición" parcial del autómata, de modo que para y no está definido o define una transición desde sobre el carácter . δ ( q , σ ) {\displaystyle \delta (q,\sigma )} q Q {\displaystyle q\in Q} σ Σ {\displaystyle \sigma \in \Sigma } q {\displaystyle q} σ {\displaystyle \sigma }

Lo más común es que el autómata finito determinista se represente como un gráfico dirigido ("diagrama") tal que: [10]

  • El conjunto de vértices del gráfico corresponde al estado de estados , Q {\displaystyle Q}
  • El gráfico tiene un vértice marcado específico correspondiente al estado inicial , q 0 {\displaystyle q_{0}}
  • El gráfico tiene varios vértices marcados correspondientes al conjunto de estados finales , F {\displaystyle F}
  • El conjunto de arcos del gráfico corresponde al conjunto de transiciones , δ {\displaystyle \delta }
  • En concreto, cada transición se representa mediante un arco que va desde hasta marcado con el carácter . Esta transición también puede denotarse como . δ ( q 1 , σ ) = q 2 {\textstyle \delta (q_{1},\sigma )=q_{2}} q 1 {\displaystyle q_{1}} q 2 {\displaystyle q_{2}} σ {\displaystyle \sigma } q 1 σ q 2 {\textstyle q_{1}{\begin{smallmatrix}{\sigma }\\[-5pt]{\longrightarrow }\end{smallmatrix}}q_{2}}

En términos de su diagrama, el autómata reconoce la palabra sólo si existe un camino desde el vértice inicial hasta algún vértice final tal que la concatenación de caracteres en este camino forme . El conjunto de palabras reconocidas por un autómata forma un lenguaje que está configurado para ser reconocido por el autómata. En estos términos, el lenguaje reconocido por un autómata de sufijo es el lenguaje de sus sufijos (posiblemente vacíos). [9] ω = ω 1 ω 2 ω m {\displaystyle \omega =\omega _{1}\omega _{2}\dots \omega _{m}} q 0 {\displaystyle q_{0}} q F {\displaystyle q\in F} ω {\displaystyle \omega } S {\displaystyle S}

Estados del autómata

El "contexto correcto" de la palabra con respecto al lenguaje es un conjunto que es un conjunto de palabras tales que su concatenación con forma una palabra de . Los contextos correctos inducen una relación de equivalencia natural en el conjunto de todas las palabras. Si el lenguaje es reconocido por algún autómata finito determinista, existe un autómata único hasta el isomorfismo que reconoce el mismo lenguaje y tiene el mínimo número posible de estados. Tal autómata se llama autómata mínimo para el lenguaje dado . El teorema de Myhill-Nerode permite definirlo explícitamente en términos de contextos correctos: [11] [12] ω {\displaystyle \omega } L {\displaystyle L} [ ω ] R = { α : ω α L } {\displaystyle [\omega ]_{R}=\{\alpha :\omega \alpha \in L\}} α {\displaystyle \alpha } ω {\displaystyle \omega } L {\displaystyle L} [ α ] R = [ β ] R {\displaystyle [\alpha ]_{R}=[\beta ]_{R}} L {\displaystyle L} L {\displaystyle L}

El teorema  del  autómata mínimo que reconoce el lenguaje sobre el alfabeto puede definirse explícitamente de la siguiente manera: L {\displaystyle L} Σ {\displaystyle \Sigma }

  • El alfabeto sigue siendo el mismo, Σ {\displaystyle \Sigma }
  • Los estados corresponden a los contextos correctos de todas las palabras posibles . Q {\displaystyle Q} [ ω ] R {\displaystyle [\omega ]_{R}} ω Σ {\displaystyle \omega \in \Sigma ^{*}}
  • El estado inicial corresponde al contexto correcto de la palabra vacía , q 0 {\displaystyle q_{0}} [ ε ] R {\displaystyle [\varepsilon ]_{R}}
  • Los estados finales corresponden a los contextos correctos de las palabras de , F {\displaystyle F} [ ω ] R {\displaystyle [\omega ]_{R}} ω L {\displaystyle \omega \in L}
  • Las transiciones se dan por , donde y . δ {\displaystyle \delta } [ ω ] R σ [ ω σ ] R {\displaystyle [\omega ]_{R}{\begin{smallmatrix}{\sigma }\\[-5pt]{\longrightarrow }\end{smallmatrix}}[\omega \sigma ]_{R}} ω Σ {\displaystyle \omega \in \Sigma ^{*}} σ Σ {\displaystyle \sigma \in \Sigma }

En estos términos, un "autómata de sufijos" es el autómata finito determinista mínimo que reconoce el lenguaje de los sufijos de la palabra . El contexto correcto de la palabra con respecto a este lenguaje está formado por palabras , tales que es un sufijo de . Esto permite formular el siguiente lema que define una biyección entre el contexto correcto de la palabra y el conjunto de posiciones correctas de sus ocurrencias en : [13] [14] S = s 1 s 2 s n {\displaystyle S=s_{1}s_{2}\dots s_{n}} ω {\displaystyle \omega } α {\displaystyle \alpha } ω α {\displaystyle \omega \alpha } S {\displaystyle S} S {\displaystyle S}

Teorema  —  Sea el conjunto de posiciones correctas de ocurrencias de en . e n d p o s ( ω ) = { r : ω = s l s r } {\displaystyle endpos(\omega )=\{r:\omega =s_{l}\dots s_{r}\}} ω {\displaystyle \omega } S {\displaystyle S}

Existe la siguiente biyección entre y : e n d p o s ( ω ) {\displaystyle endpos(\omega )} [ ω ] R {\displaystyle [\omega ]_{R}}

  • Si , entonces ; x e n d p o s ( ω ) {\displaystyle x\in endpos(\omega )} s x + 1 s x + 2 s n [ ω ] R {\displaystyle s_{x+1}s_{x+2}\dots s_{n}\in [\omega ]_{R}}
  • Si , entonces . α [ ω ] R {\displaystyle \alpha \in [\omega ]_{R}} n | α | e n d p o s ( ω ) {\displaystyle n-\vert \alpha \vert \in endpos(\omega )}

Por ejemplo, para la palabra y su subpalabra , se cumple y . De manera informal, se forma con palabras que siguen a las ocurrencias de hasta el final de y se forma con las posiciones correctas de esas ocurrencias. En este ejemplo, el elemento se corresponde con la palabra mientras que la palabra se corresponde con el elemento . S = a b a c a b a {\displaystyle S=abacaba} ω = a b {\displaystyle \omega =ab} e n d p o s ( a b ) = { 2 , 6 } {\displaystyle endpos(ab)=\{2,6\}} [ a b ] R = { a , a c a b a } {\displaystyle [ab]_{R}=\{a,acaba\}} [ a b ] R {\displaystyle [ab]_{R}} a b {\displaystyle ab} S {\displaystyle S} e n d p o s ( a b ) {\displaystyle endpos(ab)} x = 2 e n d p o s ( a b ) {\displaystyle x=2\in endpos(ab)} s 3 s 4 s 5 s 6 s 7 = a c a b a [ a b ] R {\displaystyle s_{3}s_{4}s_{5}s_{6}s_{7}=acaba\in [ab]_{R}} a [ a b ] R {\displaystyle a\in [ab]_{R}} 7 | a | = 6 e n d p o s ( a b ) {\displaystyle 7-|a|=6\in endpos(ab)}

Esto implica varias propiedades estructurales de los estados del autómata sufijo. Sea , entonces: [14] | α | | β | {\displaystyle |\alpha |\leq |\beta |}

  • Si y tienen al menos un elemento común , entonces y también tienen un elemento común. Esto implica que es un sufijo de y por lo tanto y . En el ejemplo mencionado anteriormente, , entonces es un sufijo de y por lo tanto y ; [ α ] R {\displaystyle [\alpha ]_{R}} [ β ] R {\displaystyle [\beta ]_{R}} x {\displaystyle x} e n d p o s ( α ) {\displaystyle endpos(\alpha )} e n d p o s ( β ) {\displaystyle endpos(\beta )} α {\displaystyle \alpha } β {\displaystyle \beta } e n d p o s ( β ) e n d p o s ( α ) {\displaystyle endpos(\beta )\subset endpos(\alpha )} [ β ] R [ α ] R {\displaystyle [\beta ]_{R}\subset [\alpha ]_{R}} a [ a b ] R [ c a b ] R {\displaystyle a\in [ab]_{R}\cap [cab]_{R}} a b {\displaystyle ab} c a b {\displaystyle cab} [ c a b ] R = { a } { a , a c a b a } = [ a b ] R {\displaystyle [cab]_{R}=\{a\}\subset \{a,acaba\}=[ab]_{R}} e n d p o s ( c a b ) = { 6 } { 2 , 6 } = e n d p o s ( a b ) {\displaystyle endpos(cab)=\{6\}\subset \{2,6\}=endpos(ab)}
  • Si , entonces , por lo tanto, aparece en sólo como sufijo de . Por ejemplo, para y se cumple que y ; [ α ] R = [ β ] R {\displaystyle [\alpha ]_{R}=[\beta ]_{R}} e n d p o s ( α ) = e n d p o s ( β ) {\displaystyle endpos(\alpha )=endpos(\beta )} α {\displaystyle \alpha } S {\displaystyle S} β {\displaystyle \beta } α = b {\displaystyle \alpha =b} β = a b {\displaystyle \beta =ab} [ b ] R = [ a b ] R = { a , a c a b a } {\displaystyle [b]_{R}=[ab]_{R}=\{a,acaba\}} e n d p o s ( b ) = e n d p o s ( a b ) = { 2 , 6 } {\displaystyle endpos(b)=endpos(ab)=\{2,6\}}
  • Si y es un sufijo de tal que , entonces . En el ejemplo anterior y se cumple para el sufijo "intermedio" que . [ α ] R = [ β ] R {\displaystyle [\alpha ]_{R}=[\beta ]_{R}} γ {\displaystyle \gamma } β {\displaystyle \beta } | α | | γ | | β | {\displaystyle |\alpha |\leq |\gamma |\leq |\beta |} [ α ] R = [ γ ] R = [ β ] R {\displaystyle [\alpha ]_{R}=[\gamma ]_{R}=[\beta ]_{R}} [ c ] R = [ b a c ] R = { a b a } {\displaystyle [c]_{R}=[bac]_{R}=\{aba\}} γ = a c {\displaystyle \gamma =ac} [ a c ] R = { a b a } {\displaystyle [ac]_{R}=\{aba\}}

Cualquier estado del autómata de sufijos reconoce una cadena continua de sufijos anidados de la palabra más larga reconocida por este estado. [14] q = [ α ] R {\displaystyle q=[\alpha ]_{R}}

La "extensión izquierda" de la cadena es la cadena más larga que tiene el mismo contexto derecho que . La longitud de la cadena más larga reconocida por se denota por . Se cumple: [15] γ {\displaystyle {\overset {\scriptstyle {\leftarrow }}{\gamma }}} γ {\displaystyle \gamma } ω {\displaystyle \omega } γ {\displaystyle \gamma } | γ | {\displaystyle |{\overset {\scriptstyle {\leftarrow }}{\gamma }}|} q = [ γ ] R {\displaystyle q=[\gamma ]_{R}} l e n ( q ) {\displaystyle len(q)}

Teorema  —  La extensión izquierda de puede representarse como , donde es la palabra más larga tal que cualquier aparición de en está precedida por . γ {\displaystyle \gamma } γ = β γ {\displaystyle {\overleftarrow {\gamma }}=\beta \gamma } β {\displaystyle \beta } γ {\displaystyle \gamma } S {\displaystyle S} β {\displaystyle \beta }

El "enlace de sufijo" del estado es el puntero al estado que contiene el sufijo más grande que no es reconocido por . l i n k ( q ) {\displaystyle link(q)} q = [ α ] R {\displaystyle q=[\alpha ]_{R}} p {\displaystyle p} α {\displaystyle \alpha } q {\displaystyle q}

En estos términos se puede decir que reconoce exactamente todos los sufijos de que son más largos que y no más largos que . También se cumple: [15] q = [ α ] R {\displaystyle q=[\alpha ]_{R}} α {\displaystyle {\overset {\scriptstyle {\leftarrow }}{\alpha }}} l e n ( l i n k ( q ) ) {\displaystyle len(link(q))} l e n ( q ) {\displaystyle len(q)}

Teorema  —  Los enlaces de sufijos forman un árbol que puede definirse explícitamente de la siguiente manera: T ( V , E ) {\displaystyle {\mathcal {T}}(V,E)}

  1. Los vértices del árbol corresponden a las extensiones izquierdas de todas las subcadenas, V {\displaystyle V} ω {\displaystyle {\overleftarrow {\omega }}} S {\displaystyle S}
  2. Los bordes del árbol conectan pares de vértices , tales que y . E {\displaystyle E} ( ω , α ω ) {\displaystyle ({\overleftarrow {\omega }},{\overleftarrow {\alpha \omega }})} α Σ {\displaystyle \alpha \in \Sigma } ω α ω {\displaystyle {\overleftarrow {\omega }}\neq {\overleftarrow {\alpha \omega }}}

Conexión con árboles de sufijos

Relación entre el sufijo trie, el sufijo tree, DAWG y CDAWG

Un " árbol de prefijos " (o "trie") es un árbol dirigido con raíz en el que los arcos están marcados por caracteres de tal manera que ningún vértice de dicho árbol tiene dos arcos salientes marcados con el mismo carácter. Algunos vértices en trie están marcados como finales. Se dice que Trie reconoce un conjunto de palabras definidas por caminos desde su raíz hasta los vértices finales. De esta manera, los árboles de prefijos son un tipo especial de autómatas finitos deterministas si percibe su raíz como un vértice inicial. [16] El "trie de sufijos" de la palabra es un árbol de prefijos que reconoce un conjunto de sus sufijos. "Un árbol de sufijos " es un árbol obtenido a partir de un trie de sufijos mediante el procedimiento de compactación, durante el cual se fusionan los bordes consecuentes si el grado del vértice entre ellos es igual a dos. [15] v {\displaystyle v} S {\displaystyle S}

Por definición, un autómata de sufijo puede obtenerse mediante la minimización del trie de sufijo. Puede demostrarse que un autómata de sufijo compactado se obtiene mediante la minimización del árbol de sufijo (si se supone que cada cadena en el borde del árbol de sufijo es un carácter sólido del alfabeto) y la compactación del autómata de sufijo. [17] Además de esta conexión entre el árbol de sufijo y el autómata de sufijo de la misma cadena, también existe una conexión entre el autómata de sufijo de la cadena y el árbol de sufijo de la cadena invertida . [18] S = s 1 s 2 s n {\displaystyle S=s_{1}s_{2}\dots s_{n}} S R = s n s n 1 s 1 {\displaystyle S^{R}=s_{n}s_{n-1}\dots s_{1}}

De manera similar a los contextos derechos, se pueden introducir "contextos izquierdos" , "extensiones derechas" correspondientes a la cadena más larga que tenga el mismo contexto izquierdo que y la relación de equivalencia . Si se consideran las extensiones derechas con respecto al lenguaje de los "prefijos" de la cadena, se puede obtener: [15] [ ω ] L = { β Σ : β ω L } {\displaystyle [\omega ]_{L}=\{\beta \in \Sigma ^{*}:\beta \omega \in L\}} ω   {\displaystyle {\overset {\scriptstyle {\rightarrow }}{\omega ~}}} ω {\displaystyle \omega } [ α ] L = [ β ] L {\displaystyle [\alpha ]_{L}=[\beta ]_{L}} L {\displaystyle L} S {\displaystyle S}

Teorema  —  El árbol de sufijos de la cadena puede definirse explícitamente de la siguiente manera: S {\displaystyle S}

  • Los vértices del árbol corresponden a extensiones derechas de todas las subcadenas, V {\displaystyle V} ω {\displaystyle {\overrightarrow {\omega }}} S {\displaystyle S}
  • Las aristas corresponden a tripletes tales que y . E {\displaystyle E} ( ω , x α , ω x ) {\displaystyle ({\overrightarrow {\omega }},x\alpha ,{\overrightarrow {\omega x}})} x Σ {\displaystyle x\in \Sigma } ω x = ω x α {\displaystyle {\overrightarrow {\omega x}}={\overrightarrow {\omega }}x\alpha }

Aquí triplete significa que hay un borde de a con la cuerda escrita en él ( v 1 , ω , v 2 ) E {\displaystyle (v_{1},\omega ,v_{2})\in E} v 1 {\displaystyle v_{1}} v 2 {\displaystyle v_{2}} ω {\displaystyle \omega }

, lo que implica que el árbol de enlace de sufijos de la cadena y el árbol de sufijos de la cadena son isomorfos: [18] S {\displaystyle S} S R {\displaystyle S^{R}}

Estructuras de sufijos de las palabras "abbcbc" y "cbcbba" 

De manera similar al caso de las extensiones izquierdas, el siguiente lema se aplica a las extensiones derechas: [15]

Teorema  :  La extensión derecha de la cadena se puede representar como , donde es la palabra más larga tal que cada aparición de en es sucedida por . γ {\displaystyle \gamma } γ = γ α {\displaystyle {\overrightarrow {\gamma }}=\gamma \alpha } α {\displaystyle \alpha } γ {\displaystyle \gamma } S {\displaystyle S} α {\displaystyle \alpha }

Tamaño

Un autómata sufijo de la cadena de longitud tiene como máximo estados y como máximo transiciones. Estos límites se alcanzan en las cadenas y correspondientemente. [13] Esto se puede formular de una manera más estricta como donde y son los números de transiciones y estados en el autómata correspondientemente. [14] S {\displaystyle S} n > 1 {\displaystyle n>1} 2 n 1 {\displaystyle 2n-1} 3 n 4 {\displaystyle 3n-4} a b b b b = a b n 1 {\displaystyle abb\dots bb=ab^{n-1}} a b b b c = a b n 2 c {\displaystyle abb\dots bc=ab^{n-2}c} | δ | | Q | + n 2 {\displaystyle |\delta |\leq |Q|+n-2} | δ | {\displaystyle |\delta |} | Q | {\displaystyle |Q|}

Autómatas de sufijo máximo

Construcción

Inicialmente el autómata sólo consta de un único estado correspondiente a la palabra vacía, luego se van añadiendo los caracteres de la cadena uno a uno y el autómata se reconstruye en cada paso de forma incremental. [19]

Actualizaciones estatales

Después de que se añade un nuevo carácter a la cadena, se modifican algunas clases de equivalencia. Sea el contexto correcto de con respecto al lenguaje de los sufijos. Entonces, la transición de a después de que se añade a se define mediante el lema: [14] [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} α {\displaystyle \alpha } ω {\displaystyle \omega } [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} x {\displaystyle x} ω {\displaystyle \omega }

Teorema  :  Sean algunas palabras y algún carácter de este alfabeto. Entonces existe la siguiente correspondencia entre y : α , ω Σ {\displaystyle \alpha ,\omega \in \Sigma ^{*}} Σ {\displaystyle \Sigma } x Σ {\displaystyle x\in \Sigma } [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}}

  • [ α ] R ω x = [ α ] R ω x { ε } {\displaystyle [\alpha ]_{R_{\omega x}}=[\alpha ]_{R_{\omega }}x\cup \{\varepsilon \}} si es un sufijo de ; α {\displaystyle \alpha } ω x {\displaystyle \omega x}
  • [ α ] R ω x = [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}=[\alpha ]_{R_{\omega }}x} de lo contrario.

Después de añadir a la palabra actual el contexto correcto de puede cambiar significativamente solo si es un sufijo de . Esto implica que la relación de equivalencia es un refinamiento de . En otras palabras, si , entonces . Después de la adición de un nuevo carácter , se dividirán como máximo dos clases de equivalencia de y cada una de ellas puede dividirse como máximo en dos nuevas clases. Primero, la clase de equivalencia correspondiente al contexto correcto vacío siempre se divide en dos clases de equivalencia, una de ellas correspondiente a sí misma y que tiene como contexto correcto. Esta nueva clase de equivalencia contiene exactamente y todos sus sufijos que no ocurrieron en , ya que el contexto correcto de tales palabras estaba vacío antes y ahora solo contiene palabras vacías. [14] x {\displaystyle x} ω {\displaystyle \omega } α {\displaystyle \alpha } α {\displaystyle \alpha } ω x {\displaystyle \omega x} R ω x {\displaystyle \equiv _{R_{\omega x}}} R ω {\displaystyle \equiv _{R_{\omega }}} [ α ] R ω x = [ β ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}=[\beta ]_{R_{\omega x}}} [ α ] R ω = [ β ] R ω {\displaystyle [\alpha ]_{R_{\omega }}=[\beta ]_{R_{\omega }}} R ω {\displaystyle \equiv _{R_{\omega }}} ω x {\displaystyle \omega x} { ε } {\displaystyle \{\varepsilon \}} ω x {\displaystyle \omega x} ω {\displaystyle \omega }

Dada la correspondencia entre los estados del autómata de sufijos y los vértices del árbol de sufijos, es posible averiguar el segundo estado que puede dividirse después de que se añada un nuevo carácter. La transición de a corresponde a la transición de a en la cadena invertida. En términos de árboles de sufijos, corresponde a la inserción del nuevo sufijo más largo en el árbol de sufijos de . Como máximo, se pueden formar dos nuevos vértices después de esta inserción: uno de ellos correspondiente a , mientras que el otro corresponde a su antecesor directo si hubo una ramificación. Volviendo a los autómatas de sufijos, significa que el primer nuevo estado reconoce y el segundo (si hay un segundo nuevo estado) es su enlace de sufijo. Puede enunciarse como un lema: [14] ω {\displaystyle \omega } ω x {\displaystyle \omega x} ω R {\displaystyle \omega ^{R}} x ω R {\displaystyle x\omega ^{R}} x ω R {\displaystyle x\omega ^{R}} ω R {\displaystyle \omega ^{R}} x ω R {\displaystyle x\omega ^{R}} ω x {\displaystyle \omega x}

Teorema  :  Sea , alguna palabra y carácter sobre . Sea también el sufijo más largo de , que aparece en , y sea . Entonces, para cualquier subcadena de , se cumple: ω Σ {\displaystyle \omega \in \Sigma ^{*}} x Σ {\displaystyle x\in \Sigma } Σ {\displaystyle \Sigma } α {\displaystyle \alpha } ω x {\displaystyle \omega x} ω {\displaystyle \omega } β = α {\displaystyle \beta ={\overset {\scriptstyle {\leftarrow }}{\alpha }}} u , v {\displaystyle u,v} ω {\displaystyle \omega }

  • Si y , entonces ; [ u ] R ω = [ v ] R ω {\displaystyle [u]_{R_{\omega }}=[v]_{R_{\omega }}} [ u ] R ω [ α ] R ω {\displaystyle [u]_{R_{\omega }}\neq [\alpha ]_{R_{\omega }}} [ u ] R ω x = [ v ] R ω x {\displaystyle [u]_{R_{\omega x}}=[v]_{R_{\omega x}}}
  • Si y , entonces ; [ u ] R ω = [ α ] R ω {\displaystyle [u]_{R_{\omega }}=[\alpha ]_{R_{\omega }}} | u | | α | {\displaystyle \vert u\vert \leq \vert \alpha \vert } [ u ] R ω x = [ α ] R ω x {\displaystyle [u]_{R_{\omega x}}=[\alpha ]_{R_{\omega x}}}
  • Si y , entonces . [ u ] R ω = [ α ] R ω {\displaystyle [u]_{R_{\omega }}=[\alpha ]_{R_{\omega }}} | u | > | α | {\displaystyle \vert u\vert >\vert \alpha \vert } [ u ] R ω x = [ β ] R ω x {\displaystyle [u]_{R_{\omega x}}=[\beta ]_{R_{\omega x}}}

Esto implica que si (por ejemplo, cuando no ocurrió en absoluto y ), entonces solo se divide la clase de equivalencia correspondiente al contexto derecho vacío. [14] α = β {\displaystyle \alpha =\beta } x {\displaystyle x} ω {\displaystyle \omega } α = β = ε {\displaystyle \alpha =\beta =\varepsilon }

Además de los enlaces de sufijos, también es necesario definir estados finales del autómata. De las propiedades de estructura se deduce que todos los sufijos de una palabra reconocidos por son reconocidos por algún vértice en la ruta de sufijos de . Es decir, los sufijos con una longitud mayor que se encuentran en , los sufijos con una longitud mayor que pero no mayor que se encuentran en , y así sucesivamente. Por lo tanto, si el estado que reconoce se denota por , entonces todos los estados finales (es decir, los sufijos que reconocen de ) forman la secuencia . [19] α {\displaystyle \alpha } q = [ α ] R {\displaystyle q=[\alpha ]_{R}} ( q , l i n k ( q ) , l i n k 2 ( q ) , ) {\displaystyle (q,link(q),link^{2}(q),\dots )} q {\displaystyle q} l e n ( l i n k ( q ) ) {\displaystyle len(link(q))} q {\displaystyle q} l e n ( l i n k ( l i n k ( q ) ) {\displaystyle len(link(link(q))} l e n ( l i n k ( q ) ) {\displaystyle len(link(q))} l i n k ( q ) {\displaystyle link(q)} ω {\displaystyle \omega } l a s t {\displaystyle last} ω {\displaystyle \omega } ( l a s t , l i n k ( l a s t ) , l i n k 2 ( l a s t ) , ) {\displaystyle (last,link(last),link^{2}(last),\dots )}

Después de que el carácter se añade a los posibles nuevos estados del autómata de sufijo son y . El enlace de sufijo de va a y de va a . Las palabras de aparecen en solo como sus sufijos, por lo tanto, no debería haber transiciones en absoluto desde mientras que las transiciones a deben ir desde sufijos de que tengan una longitud de al menos y estar marcadas con el carácter . El estado está formado por un subconjunto de , por lo tanto, las transiciones de deben ser las mismas que las de . Mientras tanto, las transiciones que conducen a deben ir desde sufijos de que tengan una longitud menor que y al menos , ya que dichas transiciones han conducido a antes y correspondieron a una parte separada de este estado. Los estados correspondientes a estos sufijos se pueden determinar mediante el recorrido de la ruta de enlace de sufijo para . [19] x {\displaystyle x} ω {\displaystyle \omega } [ ω x ] R ω x {\displaystyle [\omega x]_{R_{\omega x}}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} [ ω x ] R ω x {\displaystyle [\omega x]_{R_{\omega x}}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} l i n k ( [ α ] R ω ) {\displaystyle link([\alpha ]_{R_{\omega }})} [ ω x ] R ω x {\displaystyle [\omega x]_{R_{\omega x}}} ω x {\displaystyle \omega x} [ ω x ] R ω x {\displaystyle [\omega x]_{R_{\omega x}}} ω {\displaystyle \omega } α {\displaystyle \alpha } x {\displaystyle x} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} [ α ] R ω x {\displaystyle [\alpha ]_{R_{\omega x}}} ω {\displaystyle \omega } | α | {\displaystyle |\alpha |} l e n ( l i n k ( [ α ] R ω ) ) {\displaystyle len(link([\alpha ]_{R_{\omega }}))} [ α ] R ω {\displaystyle [\alpha ]_{R_{\omega }}} [ ω ] R ω {\displaystyle [\omega ]_{R_{\omega }}}

Construcción del autómata sufijo para la palabra abbcbc 
∅ → un
Después de agregar el primer carácter, solo se crea un estado en el autómata de sufijo.De manera similar, solo se agrega una hoja al árbol de sufijos.
a → ab
Se extraen nuevas transiciones de todos los estados finales anteriores, ya que b no aparecía antes.Por la misma razón se añade otra hoja a la raíz del sufijo árbol.
ab → abb
El estado 2 reconoce las palabras ab y b , pero solo b es el nuevo sufijo, por lo tanto, esta palabra se separa en el estado 4.En el árbol de sufijos corresponde a la división de la arista que conduce al vértice 2.
abb → abbc
El carácter c aparece por primera vez, por lo que las transiciones se extraen de todos los estados finales anteriores.El árbol de sufijos de la cadena inversa tiene otra hoja agregada a la raíz.
abbc → abbcb
El estado 4 consta de la única palabra b , que es sufijo, por lo tanto el estado no está dividido.En consecuencia, la nueva hoja se cuelga en el vértice 4 del árbol de sufijos.
abbcb → abbcbc
El estado 5 reconoce las palabras abbc , bbc , bc y c , pero solo las dos últimas son sufijos de la nueva palabra, por lo que se separan en el nuevo estado 8.En consecuencia, la arista que conduce al vértice 5 se divide y el vértice 8 se coloca en el medio de la arista.

Algoritmo de construcción

Los resultados teóricos anteriores conducen al siguiente algoritmo que toma el carácter y reconstruye el autómata de sufijo de en el autómata de sufijo de : [19] x {\displaystyle x} ω {\displaystyle \omega } ω x {\displaystyle \omega x}

  1. El estado correspondiente a la palabra se mantiene como ; ω {\displaystyle \omega } l a s t {\displaystyle last}
  2. Después de agregarlo, el valor anterior de se almacena en la variable y se reasigna al nuevo estado correspondiente a ; x {\displaystyle x} l a s t {\displaystyle last} p {\displaystyle p} l a s t {\displaystyle last} ω x {\displaystyle \omega x}
  3. Los estados correspondientes a los sufijos de se actualizan con transiciones a . Para ello se debe recorrer , hasta que exista un estado que ya tenga una transición de ; ω {\displaystyle \omega } l a s t {\displaystyle last} p , l i n k ( p ) , l i n k 2 ( p ) , {\displaystyle p,link(p),link^{2}(p),\dots } x {\displaystyle x}
  4. Una vez finalizado el bucle mencionado anteriormente, se dan 3 casos:
    1. Si ninguno de los estados en la ruta del sufijo tuvo una transición por , entonces nunca ocurrió en antes y el enlace del sufijo de debe conducir a ; x {\displaystyle x} x {\displaystyle x} ω {\displaystyle \omega } l a s t {\displaystyle last} q 0 {\displaystyle q_{0}}
    2. Si se encuentra la transición por y conduce del estado al estado , tal que , entonces no tiene que dividirse y es un enlace de sufijo de ; x {\displaystyle x} p {\displaystyle p} q {\displaystyle q} l e n ( p ) + 1 = l e n ( q ) {\displaystyle len(p)+1=len(q)} q {\displaystyle q} l a s t {\displaystyle last}
    3. Si se encuentra la transición pero , entonces las palabras que tienen una longitud máxima deben segregarse en un nuevo estado "clon" ; l e n ( q ) > l e n ( p ) + 1 {\displaystyle len(q)>len(p)+1} q {\displaystyle q} l e n ( p ) + 1 {\displaystyle len(p)+1} c l {\displaystyle cl}
  5. Si el paso anterior concluyó con la creación de , las transiciones de éste y su sufijo enlace deben copiar las de , al mismo tiempo se asigna como enlace de sufijo común de ambos y ; c l {\displaystyle cl} q {\displaystyle q} c l {\displaystyle cl} q {\displaystyle q} l a s t {\displaystyle last}
  6. Las transiciones que han llevado a antes pero que corresponden a palabras de longitud máxima se redirigen a . Para ello, se continúa recorriendo la ruta del sufijo de hasta que se encuentre el estado tal que la transición de desde no lleve a . q {\displaystyle q} l e n ( p ) + 1 {\displaystyle len(p)+1} c l {\displaystyle cl} p {\displaystyle p} x {\displaystyle x} q {\displaystyle q}

Todo el procedimiento se describe mediante el siguiente pseudocódigo: [19]

función  add_letter(x) : define  p = last  asigna  last = new_state()  asigna  len(last) = len(p) + 1  mientras  δ(p, x) no está definido: asigna  δ(p, x) = last, p = link(p)  define  q = δ(p, x)  si  q = last : asigna  link(last) = q 0  de lo contrario si  len(q) = len(p) + 1 : asigna  link(last) = q  de lo contrario : define  cl = new_state()  asigna  len(cl) = len(p) + 1  asigna  δ(cl) = δ(q), link(cl) = link(q)  asigna  link(last) = link(q) = cl  mientras  δ(p, x) = q : asigna  δ(p, x) = cl, p = link(p)

Aquí se encuentra el estado inicial del autómata y es una función que crea un nuevo estado para él. Se supone que , , y se almacenan como variables globales. [19] q 0 {\displaystyle q_{0}} n e w _ s t a t e ( ) {\displaystyle new\_state()} l a s t {\displaystyle last} l e n {\displaystyle len} l i n k {\displaystyle link} δ {\displaystyle \delta }

Complejidad

La complejidad del algoritmo puede variar dependiendo de la estructura subyacente utilizada para almacenar las transiciones del autómata. Puede implementarse en con sobrecarga de memoria o en con sobrecarga de memoria si se supone que la asignación de memoria se realiza en . Para obtener dicha complejidad, uno tiene que utilizar los métodos de análisis amortizado . El valor de se reduce estrictamente con cada iteración del ciclo, mientras que solo puede aumentar hasta en uno después de la primera iteración del ciclo en la siguiente llamada add_letter . El valor general de nunca excede y solo aumenta en uno entre iteraciones de adición de nuevas letras que sugieren que la complejidad total también es lineal como máximo. La linealidad del segundo ciclo se muestra de manera similar. [19] O ( n log | Σ | ) {\displaystyle O(n\log |\Sigma |)} O ( n ) {\displaystyle O(n)} O ( n ) {\displaystyle O(n)} O ( n | Σ | ) {\displaystyle O(n|\Sigma |)} O ( 1 ) {\displaystyle O(1)} l e n ( p ) {\displaystyle len(p)} l e n ( p ) {\displaystyle len(p)} n {\displaystyle n}

Generalizaciones

El autómata de sufijo está estrechamente relacionado con otras estructuras de sufijo e índices de subcadenas . Dado un autómata de sufijo de una cadena específica, se puede construir su árbol de sufijos mediante compactación y recorrido recursivo en tiempo lineal. [20] Se pueden realizar transformaciones similares en ambas direcciones para cambiar entre el autómata de sufijo de y el árbol de sufijo de cadena invertida . [18] Además de esto, se desarrollaron varias generalizaciones para construir un autómata para el conjunto de cadenas dado por trie, [8] automatización de sufijo compactada (CDAWG), [7] para mantener la estructura del autómata en la ventana deslizante, [21] y para construirlo de manera bidireccional, admitiendo la inserción de caracteres tanto al principio como al final de la cadena. [22] S {\displaystyle S} S R {\displaystyle S^{R}}

Autómata de sufijo compactado

Como ya se mencionó anteriormente, un autómata de sufijo compactado se obtiene mediante la compactación de un autómata de sufijo regular (eliminando estados que no son finales y tienen exactamente un arco saliente) y la minimización de un árbol de sufijos. De manera similar al autómata de sufijo regular, los estados del autómata de sufijo compactado se pueden definir de manera explícita. Una extensión bidireccional de una palabra es la palabra más larga , de modo que cada ocurrencia de en es precedida y sucedida por . En términos de extensiones izquierda y derecha significa que la extensión bidireccional es la extensión izquierda de la extensión derecha o, lo que es equivalente, la extensión derecha de la extensión izquierda, es decir . En términos de extensiones bidireccionales, el autómata compactado se define de la siguiente manera: [15] γ {\displaystyle {\overset {\scriptstyle {\longleftrightarrow }}{\gamma }}} γ {\displaystyle \gamma } ω = β γ α {\displaystyle \omega =\beta \gamma \alpha } γ {\displaystyle \gamma } S {\displaystyle S} β {\displaystyle \beta } α {\displaystyle \alpha } γ = γ = γ {\textstyle {\overset {\scriptstyle \longleftrightarrow }{\gamma }}={\overset {\scriptstyle \leftarrow }{\overset {\rightarrow }{\gamma }}}={\overset {\rightarrow }{\overset {\scriptstyle \leftarrow }{\gamma }}}}

Teorema  —  El autómata sufijo compactado de la palabra se define mediante un par , donde: S {\displaystyle S} ( V , E ) {\displaystyle (V,E)}

  • V = { ω : ω Σ } {\displaystyle V=\{{\overleftrightarrow {\omega }}:\omega \in \Sigma ^{*}\}} es un conjunto de estados de autómata;
  • E = { ( ω , x α , ω x ) : x Σ , α Σ , ω x = ω x α } {\displaystyle E=\{({\overleftrightarrow {\omega }},x\alpha ,{\overleftrightarrow {\omega x}}):x\in \Sigma ,\alpha \in \Sigma ^{*},{\overleftrightarrow {\omega x}}={\overleftrightarrow {\omega }}x\alpha \}} es un conjunto de transiciones de autómatas.

Las extensiones bidireccionales inducen una relación de equivalencia que define el conjunto de palabras reconocidas por el mismo estado del autómata compactado. Esta relación de equivalencia es un cierre transitivo de la relación definida por , que resalta el hecho de que un autómata compactado puede obtenerse tanto pegando vértices de árboles de sufijos equivalentes mediante una relación (minimización del árbol de sufijos) como pegando estados de autómatas de sufijos equivalentes mediante una relación (compactación del autómata de sufijo). [23] Si las palabras y tienen las mismas extensiones derechas, y las palabras y tienen las mismas extensiones izquierdas, entonces, acumulativamente, todas las cadenas , y tienen las mismas extensiones bidireccionales. Al mismo tiempo, puede suceder que ni las extensiones izquierda ni derecha de y coincidan. Como ejemplo, se puede tomar , y , para las cuales las extensiones izquierda y derecha son las siguientes: , pero y . Dicho esto, mientras que las relaciones de equivalencia de extensiones unidireccionales se formaron mediante alguna cadena continua de prefijos o sufijos anidados, las relaciones de equivalencia de extensiones bidireccionales son más complejas y lo único que se puede concluir con seguridad es que las cadenas con la misma extensión bidireccional son subcadenas de la cadena más larga que tiene la misma extensión bidireccional, pero incluso puede suceder que no tengan ninguna subcadena no vacía en común. El número total de clases de equivalencia para esta relación no excede lo que implica que el autómata de sufijo compactado de la cadena que tiene longitud tiene como máximo estados. La cantidad de transiciones en dicho autómata es como máximo . [15] α = β {\textstyle {\overset {\scriptstyle \longleftrightarrow }{\alpha }}={\overset {\scriptstyle \longleftrightarrow }{\beta }}} ( α = β ) ( α = β ) {\textstyle ({\overset {\scriptstyle {\rightarrow }}{\alpha \,}}={\overset {\scriptstyle {\rightarrow }}{\beta \,}})\vee ({\overset {\scriptstyle {\leftarrow }}{\alpha }}={\overset {\scriptstyle {\leftarrow }}{\beta }})} α = β {\displaystyle {\overset {\scriptstyle {\leftarrow }}{\alpha }}={\overset {\scriptstyle {\leftarrow }}{\beta }}} α = β {\displaystyle {\overset {\scriptstyle {\rightarrow }}{\alpha \,}}={\overset {\scriptstyle {\rightarrow }}{\beta \,}}} α {\displaystyle \alpha } β {\displaystyle \beta } β {\displaystyle \beta } γ {\displaystyle \gamma } α {\displaystyle \alpha } β {\displaystyle \beta } γ {\displaystyle \gamma } α {\displaystyle \alpha } γ {\displaystyle \gamma } S = β = a b {\displaystyle S=\beta =ab} α = a {\displaystyle \alpha =a} γ = b {\displaystyle \gamma =b} α = β = a b = β = γ {\displaystyle {\overset {\scriptstyle {\rightarrow }}{\alpha \,}}={\overset {\scriptstyle {\rightarrow }}{\beta \,}}=ab={\overset {\scriptstyle {\leftarrow }}{\beta }}={\overset {\scriptstyle {\leftarrow }}{\gamma }}} γ = b {\displaystyle {\overset {\scriptstyle {\rightarrow }}{\gamma \,}}=b} α = a {\displaystyle {\overset {\scriptstyle {\leftarrow }}{\alpha }}=a} n + 1 {\displaystyle n+1} n {\displaystyle n} n + 1 {\displaystyle n+1} 2 n 2 {\displaystyle 2n-2}

Autómata sufijo de varias cadenas

Consideremos un conjunto de palabras . Es posible construir una generalización de un autómata de sufijos que reconocería el lenguaje formado por los sufijos de todas las palabras del conjunto. Las restricciones para el número de estados y transiciones en dicho autómata permanecerían iguales que para un autómata de una sola palabra si ponemos . [23] El algoritmo es similar a la construcción de un autómata de una sola palabra excepto que en lugar del estado, la función add_letter trabajaría con el estado correspondiente a la palabra asumiendo la transición del conjunto de palabras al conjunto . [24] [25] T = { S 1 , S 2 , , S k } {\displaystyle T=\{S_{1},S_{2},\dots ,S_{k}\}} n = | S 1 | + | S 2 | + + | S k | {\displaystyle n=|S_{1}|+|S_{2}|+\dots +|S_{k}|} l a s t {\displaystyle last} ω i {\displaystyle \omega _{i}} { ω 1 , , ω i , , ω k } {\displaystyle \{\omega _{1},\dots ,\omega _{i},\dots ,\omega _{k}\}} { ω 1 , , ω i x , , ω k } {\displaystyle \{\omega _{1},\dots ,\omega _{i}x,\dots ,\omega _{k}\}}

Esta idea se generaliza aún más al caso en el que no se da explícitamente sino que se da mediante un árbol de prefijos con vértices. Mohri et al . demostraron que un autómata de este tipo tendría como máximo y puede construirse en tiempo lineal a partir de su tamaño. Al mismo tiempo, el número de transiciones en dicho autómata puede alcanzar , por ejemplo, para el conjunto de palabras sobre el alfabeto, la longitud total de las palabras es igual a , el número de vértices en el trie de sufijo correspondiente es igual a y el autómata de sufijo correspondiente está formado por estados y transiciones. El algoritmo sugerido por Mohri repite principalmente el algoritmo genérico para construir un autómata de varias cadenas, pero en lugar de hacer crecer las palabras una por una, recorre el trie en un orden de búsqueda en amplitud y agrega nuevos caracteres a medida que los encuentra en el recorrido, lo que garantiza una complejidad lineal amortizada. [26] T {\displaystyle T} Q {\displaystyle Q} 2 Q 2 {\displaystyle 2Q-2} O ( Q | Σ | ) {\displaystyle O(Q|\Sigma |)} T = { σ 1 , a σ 1 , a 2 σ 1 , , a n σ 1 , a n σ 2 , , a n σ k } {\displaystyle T=\{\sigma _{1},a\sigma _{1},a^{2}\sigma _{1},\dots ,a^{n}\sigma _{1},a^{n}\sigma _{2},\dots ,a^{n}\sigma _{k}\}} Σ = { a , σ 1 , , σ k } {\displaystyle \Sigma =\{a,\sigma _{1},\dots ,\sigma _{k}\}} O ( n 2 + n k ) {\textstyle O(n^{2}+nk)} O ( n + k ) {\displaystyle O(n+k)} O ( n + k ) {\displaystyle O(n+k)} O ( n k ) {\displaystyle O(nk)}

Ventana corrediza

Algunos algoritmos de compresión , como LZ77 y RLE, pueden beneficiarse de almacenar un autómata de sufijo o una estructura similar no para toda la cadena sino solo para los últimos caracteres mientras se actualiza la cadena. Esto se debe a que la compresión de datos suele ser expresivamente grande y el uso de memoria no es deseable. En 1985, Janet Blumer desarrolló un algoritmo para mantener un autómata de sufijo en una ventana deslizante de tamaño en el peor de los casos y en promedio, asumiendo que los caracteres se distribuyen de forma independiente y uniforme . También demostró que la complejidad no se puede mejorar: si se consideran palabras construidas como una concatenación de varias palabras, donde , entonces el número de estados para la ventana de tamaño cambiaría con frecuencia con saltos de orden , lo que hace imposible incluso la mejora teórica de para autómatas de sufijo regulares. [27] k {\displaystyle k} O ( n ) {\displaystyle O(n)} k {\displaystyle k} O ( n k ) {\displaystyle O(nk)} O ( n log k ) {\displaystyle O(n\log k)} O ( n k ) {\displaystyle O(nk)} ( a b ) m c ( a b ) m d {\displaystyle (ab)^{m}c(ab)^{m}d} k = 6 m + 2 {\displaystyle k=6m+2} k {\displaystyle k} m {\displaystyle m} O ( n k ) {\displaystyle O(nk)}

Lo mismo debería ser cierto para el árbol de sufijos porque sus vértices corresponden a estados del autómata de sufijos de la cadena invertida, pero este problema puede resolverse al no almacenar explícitamente cada vértice correspondiente al sufijo de toda la cadena, almacenando así solo los vértices con al menos dos aristas salientes. En 1989, Edward Fiala y Daniel Greene sugirieron una variación del algoritmo de construcción de árboles de sufijos de McCreight para esta tarea; [28] varios años después, Jesper Larsson obtuvo un resultado similar con la variación del algoritmo de Ukkonen . [29] [30] La existencia de un algoritmo de este tipo, para un autómata de sufijos compactado que absorba algunas propiedades tanto de los árboles de sufijos como de los autómatas de sufijos, fue una cuestión abierta durante mucho tiempo hasta que Martin Senft y Tomasz Dvorak descubrieron en 2008 que es imposible si el tamaño del alfabeto es al menos dos. [31]

Una forma de superar este obstáculo es permitir que el ancho de la ventana varíe un poco mientras se mantiene . Esto se puede lograr mediante un algoritmo aproximado sugerido por Inenaga et al. en 2004. No se garantiza que la ventana para la que se construye el autómata de sufijo en este algoritmo tenga una longitud, pero se garantiza que tenga al menos y como máximo, al tiempo que se proporciona una complejidad general lineal del algoritmo. [32] O ( k ) {\displaystyle O(k)} k {\displaystyle k} k {\displaystyle k} 2 k + 1 {\displaystyle 2k+1}

Aplicaciones

El autómata sufijo de la cadena se puede utilizar para resolver problemas como: [33] [34] S {\displaystyle S}

  • Contando el número de subcadenas distintas de en línea, S {\displaystyle S} O ( | S | ) {\displaystyle O(|S|)}
  • Encontrar la subcadena más larga de que aparece al menos dos veces en , S {\displaystyle S} O ( | S | ) {\displaystyle O(|S|)}
  • Encontrar la subcadena común más larga de y en , S {\displaystyle S} T {\displaystyle T} O ( | T | ) {\displaystyle O(|T|)}
  • Contando el número de ocurrencias de en en , T {\displaystyle T} S {\displaystyle S} O ( | T | ) {\displaystyle O(|T|)}
  • Encontrar todas las ocurrencias de en , donde es el número de ocurrencias. T {\displaystyle T} S {\displaystyle S} O ( | T | + k ) {\displaystyle O(|T|+k)} k {\displaystyle k}

Se supone aquí que se da en la entrada después de que se construye el sufijo del autómata. [33] T {\displaystyle T} S {\displaystyle S}

Los autómatas de sufijo también se utilizan en la compresión de datos, [35] la recuperación de música [36] [37] y la coincidencia de secuencias del genoma. [38]

Referencias

  1. ^ ab Crochemore y Vérin (1997), pág. 192
  2. ^ de Weiner (1973)
  3. ^ Pratt (1973)
  4. ^ Slisenko (1983)
  5. ^ Blumer y otros (1984), pág. 109
  6. ^ Chen y Seiferas (1985), pág. 97
  7. ^ ab Blumer y otros (1987), pág. 578
  8. ^ ab Inenaga et al. (2001), pág. 1
  9. ^ ab Crochemore y Hancart (1997), págs. 3-6
  10. ^ ab Serebryakov et al. (2006), págs. 50–54
  11. ^ Рубцов (2019), págs. 89–94
  12. ^ Hopcroft y Ullman (1979), págs. 65-68
  13. ^ ab Blumer y otros (1984), págs. 111-114
  14. ^ abcdefgh Crochemore y Hancart (1997), págs. 27-31
  15. ^ abcdefg Inenaga et al. (2005), págs. 159-162
  16. ^ Rubinchik y Shur (2018), págs. 1-2
  17. ^ Inénaga et al. (2005), págs. 156-158
  18. ^ abc Fujishige y col. (2016), págs. 1-3
  19. ^ abcdefg Crochemore y Hancart (1997), págs. 31-36
  20. ^ Паращенко (2007), págs. 19-22
  21. ^ Blumer (1987), pág. 451
  22. ^ Inenaga (2003), pág. 1
  23. ^ ab Blumer y otros (1987), págs. 585-588
  24. ^ Blumer y otros (1987), págs. 588-589
  25. ^ Blumer y otros (1987), pág. 593
  26. ^ Mohri, Moreno y Weinstein (2009), págs. 3558–3560
  27. ^ Blumer (1987), págs. 461–465
  28. ^ Fiala y Greene (1989), pág. 490
  29. ^ Larsson (1996)
  30. ^ Brodnik y Jekovec (2018), pág. 1
  31. ^ Senft y Dvořák (2008), pág. 109
  32. ^ Inenaga y otros (2004)
  33. ^ ab Crochemore y Hancart (1997), págs. 36-39
  34. ^ Crochemore y Hancart (1997), págs. 39-41
  35. ^ Yamamoto y col. (2014), pág. 675
  36. ^ Crochemore y col. (2003), pág. 211
  37. ^ Mohri, Moreno y Weinstein (2009), pág. 3553
  38. ^ Faro (2016), pág. 145

Bibliografía

  • Blumer, A.; Blumer, J.; Ehrenfeucht, A.; Haussler, D.; McConnell, R. (1984). "Construcción del DFA mínimo para el conjunto de todas las subpalabras de una palabra en línea en tiempo lineal". Autómatas, lenguajes y programación . Apuntes de clase en informática. Vol. 172. págs. 109–118. doi :10.1007/3-540-13345-3_9. ISBN 978-3-540-13345-2.
  • Blumer, A.; Blumer, J.; Haussler, D.; McConnell, R.; Ehrenfeucht, A. (1987). "Archivos invertidos completos para una recuperación y análisis de texto eficiente". Revista de la ACM . 34 (3): 578–595. doi :10.1145/28869.28873. Zbl  1433.68118.
  • Blumer, Janet A. (1987). "¿Cuánto es ese DAWG en la ventana? Un algoritmo de ventana móvil para el gráfico de palabras acíclico dirigido". Journal of Algorithms . 8 (4): 451–469. doi :10.1016/0196-6774(87)90045-9. Zbl  0636.68109.
  • Brodnik, Andrej; Jekovec, Matevž (2018). "Árbol de sufijos deslizantes". Algoritmos . 11 (8): 118. doi : 10.3390/A11080118 . Zbl  1458.68043.
  • Chen, MT; Seiferas, Joel (1985). "Construcción eficiente y elegante de árboles de subpalabras". Algoritmos combinatorios en palabras . págs. 97–107. doi :10.1007/978-3-642-82456-2_7. ISBN 978-3-642-82458-6.
  • Crochemore, Maxime; Hancart, Christophe (1997). "Autómatas para emparejar patrones". Manual de lenguajes formales . págs. 399–462. doi :10.1007/978-3-662-07675-0_9. ISBN 978-3-642-08230-6.
  • Crochemore, Maxime; Vérin, Renaud (1997). "Sobre grafos de palabras acíclicos dirigidos y compactos". Estructuras en lógica y ciencias de la computación . Apuntes de clase en ciencias de la computación. Vol. 1261. págs. 192–211. doi :10.1007/3-540-63246-8_12. ISBN 978-3-540-63246-7.
  • Crochemore, Maxime; Iliopoulos, Costas S.; Navarro, Gonzalo; Pinzón, Yoan J. (2003). "Un enfoque de autómata de sufijo paralelo de bits para la coincidencia (δ, γ) en la recuperación de música". Procesamiento de cadenas y recuperación de información . Apuntes de conferencias sobre informática. vol. 2857, págs. 211–223. doi :10.1007/978-3-540-39984-1_16. ISBN 978-3-540-20177-9.
  • Serebryakov, Vladimir; Galochkin, Maksim Pavlovich; Furugian, Meran Gabibullaevich; Gonchar, Dmitriy Ruslanovich (2006). Теория и реализация языков программирования: Учебное пособие (PDF) (en ruso). Moscú: MZ Press. ISBN 5-94073-094-9.
  • Faro, Simone (2016). "Evaluación y mejora de algoritmos rápidos para la correspondencia exacta de secuencias genómicas". Algorithms for Computational Biology . Lecture Notes in Computer Science. Vol. 9702. págs. 145–157. doi :10.1007/978-3-319-38827-4_12. ISBN 978-3-319-38826-7.
  • Fiala, ER; Greene, DH (1989). "Compresión de datos con ventanas finitas". Comunicaciones de la ACM . 32 (4): 490–505. doi :10.1145/63334.63341.
  • Fujishige, Yuta; Tsujimaru, Yuki; Inenaga, Shunsuke; Bannai, Hideo; Takeda, Masayuki (2016). "Computación de DAWG y palabras ausentes mínimas en tiempo lineal para alfabetos enteros". 41.° Simposio internacional sobre fundamentos matemáticos de la informática (MFCS 2016) . Leibniz International Proceedings in Informatics. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. doi : 10.4230/LIPICS.MFCS.2016.38 . Zbl  1398.68703.
  • Hopcroft, John Edward; Ullman, Jeffrey David (1979). Introducción a la teoría de autómatas, lenguajes y computación (1.ª ed.). Massachusetts: Addison-Wesley. ISBN 978-81-7808-347-6. Número OL  9082218M.
  • Inenaga, Shunsuke (2003). "Construcción bidireccional de árboles de sufijos" (PDF) . Nordic Journal of Computing . 10 (1): 52–67. CiteSeerX  10.1.1.100.8726 .
  • Inenaga, Shunsuke; Hoshino, Hiromasa; Shinohara, Ayumi; Takeda, Masayuki; Arikawa, Setsuo; Mauri, Giancarlo; Pavesi, Giulio (2005). "Construcción en línea de gráficos de palabras acíclicos dirigidos compactos". Matemática Aplicada Discreta . 146 (2): 156-179. doi :10.1016/J.DAM.2004.04.012. Zbl  1084.68137.
  • Inenaga, Shunsuke; Hoshino, Hiromasa; Shinohara, Ayumi; Takeda, Masayuki; Arikawa, Setsuo (2001). «Construcción del CDAWG por un tiempo» (PDF) . Conferencia de Stringología de Praga. Procedimientos . págs. 37–48. CiteSeerX  10.1.1.24.2637 .
  • Inenaga, Shunsuke; Shinohara, Ayumi; Takeda, Masayuki; Arikawa, Setsuo (2004). "Gráficos de palabras acíclicos dirigidos compactos para una ventana deslizante". Revista de algoritmos discretos . 2 : 33–51. doi :10.1016/S1570-8667(03)00064-9. Zbl  1118.68755.
  • Larsson, NJ (1996). "Aplicación extendida de árboles de sufijos a la compresión de datos". Actas de la Conferencia sobre compresión de datos - DCC '96 . págs. 190-199. doi :10.1109/DCC.1996.488324. ISBN 0-8186-7358-3.
  • Mohri, Mehryar; Moreno, Pedro; Weinstein, Eugene (2009). "Algoritmo general de construcción de autómatas de sufijo y límites espaciales". Ciencias de la Computación Teórica . 410 (37): 3553–3562. doi :10.1016/J.TCS.2009.03.034. Zbl  1194.68143.
  • Паращенко, Дмитрий А. (2007). Обработка строк на основе суффиксных автоматов (PDF) (en ruso). San Petersburgo: Universidad ITMO.
  • Pratt, Vaughan Ronald (1973). Mejoras y aplicaciones para el buscador de repeticiones de Weiner . OCLC  726598262.
  • Рубцов, Александр Александрович (2019). Заметки и задачи о регулярных языках и конечных автоматах (PDF) (en ruso). Moscú: Instituto de Física y Tecnología de Moscú. ISBN 978-5-7417-0702-9.
  • Rubichik, Mijaíl; Shur, Arseny M. (2018). "EERTREE: una estructura de datos eficiente para procesar palíndromos en cadenas". Revista europea de combinatoria . 68 : 249–265. arXiv : 1506.04862 . doi :10.1016/J.EJC.2017.07.021. Zbl  1374.68131.
  • Senft, Martin; Dvořák, Tomáš (2008). "Perfección deslizante de CDAWG". Procesamiento de cadenas y recuperación de información . Apuntes de clase en informática. Vol. 5280. págs. 109–120. doi :10.1007/978-3-540-89097-3_12. ISBN 978-3-540-89096-6.
  • Slisenko, AO (1983). "Detección de periodicidades y emparejamiento de cadenas en tiempo real". Revista de matemáticas soviéticas . 22 (3): 1316–1387. doi :10.1007/BF01084395. Zbl  0509.68043.
  • Weiner, Peter (1973). "Algoritmos de coincidencia de patrones lineales". 14.º Simposio anual sobre conmutación y teoría de autómatas (SWAT 1973) . págs. 1–11. doi :10.1109/SWAT.1973.13.
  • Yamamoto, Jun'ichi; I, Tomohiro; Bannai, Hideo; Inenaga, Shunsuke; Takeda, Masayuki (2014). "Factorización Lempel-Ziv en línea compacta y más rápida". 31.° Simposio internacional sobre aspectos teóricos de la informática (STACS 2014) . Leibniz International Proceedings in Informatics. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. doi : 10.4230/LIPICS.STACS.2014.675 . Zbl  1359.68341.
  • Medios relacionados con Suffix autómata en Wikimedia Commons
  • Artículo sobre autómatas sufijos en Algoritmos E-Maxx en inglés
Retrieved from "https://en.wikipedia.org/w/index.php?title=Suffix_automaton&oldid=1242309098"