Articulo de referencia

La construcción de Thompson

En informática , el algoritmo de construcción de Thompson , también llamado algoritmo de McNaughton-Yamada-Thompson , [ 1 ] es un método para transformar una expresión regular e...

En informática , el algoritmo de construcción de Thompson , también llamado algoritmo de McNaughton-Yamada-Thompson , [ 1 ] es un método para transformar una expresión regular en un autómata finito no determinista (AFN) equivalente. [ 2 ] Este AFN se puede usar para comparar cadenas con la expresión regular. Este algoritmo se atribuye a Ken Thompson .

Las expresiones regulares y los autómatas finitos no deterministas son dos representaciones de lenguajes formales . Por ejemplo, las utilidades de procesamiento de texto utilizan expresiones regulares para describir patrones de búsqueda avanzados, pero los autómatas finitos no deterministas son más adecuados para su ejecución en una computadora. Por lo tanto, este algoritmo tiene interés práctico, ya que puede compilar expresiones regulares en autómatas finitos no deterministas. Desde un punto de vista teórico, este algoritmo forma parte de la prueba de que ambos aceptan exactamente los mismos lenguajes, es decir, los lenguajes regulares .

Un autómata finito no determinista (AFND) puede hacerse determinista mediante la construcción del conjunto potencia y luego minimizarse para obtener un autómata óptimo que corresponda a la expresión regular dada. Sin embargo, un AFND también puede interpretarse directamente .

Para determinar si dos expresiones regulares describen el mismo lenguaje, cada una puede convertirse en un autómata finito determinista mínimo equivalente mediante la construcción de Thompson, la construcción de conjuntos potencia y la minimización de autómatas finitos deterministas (AFD) . Si, y solo si, los autómatas resultantes coinciden salvo por el cambio de nombre de los estados, los lenguajes de las expresiones regulares coinciden.

El algoritmo

El algoritmo funciona recursivamente dividiendo una expresión en sus subexpresiones constituyentes, a partir de las cuales se construirá el autómata finito no determinista (AFND) utilizando un conjunto de reglas. [ 3 ] Más precisamente, a partir de una expresión regular E , el autómata A obtenido con la función de transición Δ respeta las siguientes propiedades:

  • A tiene exactamente un estado inicial q 0 , que no es accesible desde ningún otro estado. Es decir, para cualquier estado q y cualquier letra a ,Δ(q,a){\displaystyle \Delta (q,a)}no contiene q 0 .
  • A tiene exactamente un estado final q f , que no es coaccesible desde ningún otro estado. Es decir, para cualquier letra a ,Δ(qF,a)={\displaystyle \Delta (q_{f},a)=\emptyset }.
  • Sea c el número de concatenaciones de la expresión regular E y sea s el número de símbolos aparte de los paréntesis, es decir, | , * , a y ε . Entonces, el número de estados de A es 2 sc (lineal en el tamaño de E ).
  • El número de transiciones que parten de cualquier estado es como máximo dos.
  • Dado que un autómata finito no determinista (AFND) de m estados y como máximo e transiciones desde cada estado puede coincidir con una cadena de longitud n en tiempo O ( emn ) , un AFND de Thompson puede realizar la coincidencia de patrones en tiempo lineal, suponiendo un alfabeto de tamaño fijo. [ 4 ]

Normas

Las siguientes reglas se describen según Aho et al. (2007), [ 1 ] p.  122. En lo que sigue, N ( s ) y N ( t ) son los autómatas finitos no deterministas (AFND) de las subexpresiones s y t , respectivamente.

La expresión vacía ε se convierte en

en línea

Un símbolo a del alfabeto de entrada se convierte en

en línea

La expresión de unión s | t se convierte en

en línea

El estado q pasa a través de ε al estado inicial de N ( s ) o N ( t ). Sus estados finales se convierten en estados intermedios de todo el NFA y se fusionan mediante dos transiciones ε en el estado final del NFA.

La expresión de concatenación st se convierte en

en línea

El estado inicial de N ( s ) es el estado inicial de todo el autómata finito no determinista (AFND). El estado final de N ( s ) se convierte en el estado inicial de N ( t ). El estado final de N ( t ) es el estado final de todo el AFND.

La expresión de estrella de Kleene s * se convierte en

en línea

Una transición ε conecta el estado inicial y final del autómata finito no determinista (AFND) con el sub-AFND N ( s ) entre ellos. Otra transición ε desde el estado final interno al estado inicial interno de N ( s ) permite la repetición de la expresión s según el operador estrella.

  • La expresión entre paréntesis ( s ) se convierte en N ( s ) misma.

Con estas reglas, utilizando las reglas de expresión vacía y de símbolo como casos base, es posible demostrar mediante inducción estructural que cualquier expresión regular puede convertirse en un autómata finito no determinista (AFND) equivalente. [ 1 ]

Ejemplo

A continuación se presentan dos ejemplos: uno breve e informal con el resultado, y otro más extenso con la aplicación paso a paso del algoritmo.

Pequeño ejemplo

Ejemplo de (ε|a*b)uso de la construcción de Thompson, paso a paso.

La imagen a continuación muestra el resultado de la construcción de Thompson en (ε|a*b). El óvalo morado corresponde a a , el óvalo verde azulado corresponde a a* , el óvalo verde corresponde a b , el óvalo naranja corresponde a a*b , y el óvalo azul corresponde a ε .

Aplicación del algoritmo

NFA obtenido a partir de expresión regular(0|(1(01*(00)*0)*1)*)*

Como ejemplo, la imagen muestra el resultado del algoritmo de construcción de Thompson sobre la expresión regular (0|(1(01*(00)*0)*1)*)*que denota el conjunto de números binarios que son múltiplos de 3:

{ ε, "0", "00", "11", "000", "011", "110", "0000", "0011", "0110", "1001", "1100", "1111", "00000", ... }.

La parte superior derecha muestra la estructura lógica (árbol sintáctico) de la expresión, donde "." denota concatenación (con aridad variable); las subexpresiones se denominan de la a a la q para facilitar la referencia. La parte izquierda muestra el autómata finito no determinista resultante del algoritmo de Thompson, con el estado de entrada y salida de cada subexpresión coloreado en magenta y cian , respectivamente. Se omite la etiqueta de transición ε para mayor claridad ; las transiciones sin etiqueta son, de hecho, transiciones ε. El estado de entrada y salida correspondiente a la expresión raíz q es el estado de inicio y de aceptación del autómata, respectivamente.

Los pasos del algoritmo son los siguientes:

A continuación se muestra un autómata determinista mínimo equivalente.

Relación con otros algoritmos

El algoritmo de Thompson es uno de varios algoritmos para construir autómatas finitos no deterministas (AFND) a partir de expresiones regulares; [ 5 ] McNaughton y Yamada presentaron un algoritmo anterior. [ 6 ] A diferencia de la construcción de Thompson, el algoritmo de Kleene transforma un autómata finito en una expresión regular.

El algoritmo de construcción de Glushkov es similar al de Thompson, una vez eliminadas las transiciones ε.

Uso en la coincidencia de patrones de cadena

Las expresiones regulares se utilizan a menudo para especificar patrones que luego se le pide al software que haga coincidir. Generando un NFA mediante la construcción de Thompson y utilizando un algoritmo apropiado para simularlo, es posible crear software de coincidencia de patrones con un rendimiento que esO(metronorte){\displaystyle O(mn)}donde m es la longitud de la expresión regular y n es la longitud de la cadena que se compara. Esto es mucho mejor que lo que logran muchas implementaciones de lenguajes de programación populares;[ 7 ] sin embargo, se limita a expresiones puramente regulares y no admite patrones para lenguajes no regulares como las retroreferencias.

Referencias

  1. 1 2 3 Alfred Vaino Aho ; Monica S. Lam ; Ravi Sethi ; Jeffrey D. Ullman (2007). "3.7.4 Construcción de un autómata finito no determinista a partir de una expresión regular" (impreso) . Compiladores  : Principios, técnicas y herramientas (2.ª  ed.). Boston, MA, EE. UU.: Pearson Addison-Wesley. págs. 159-163 . ISBN  9780321486813.
  2. Louden, Kenneth C. (1997). "2.4.1 De una expresión regular a un autómata finito no determinista" (impreso) . Construcción de compiladores : Principios y práctica (3.ª ed.). 20 Park Plaza Boston, MA 02116-4324, EE. UU.: PWS Publishing Company. págs. 64–69 . ISBN    978-0-534-93972-4.{{cite book}}: CS1 mantenimiento: ubicación ( enlace )
  3. Ken Thompson (junio de 1968). "Técnicas de programación: algoritmo de búsqueda de expresiones regulares" . Communications of the ACM . 11 (6): 419– 422. doi : 10.1145/363347.363387 . S2CID 21260384 . 
  4. Xing, Guangming. "Autómata finito no determinista de Thompson minimizado" (PDF) .
  5. Watson, Bruce W. (1995). Una taxonomía de algoritmos de construcción de autómatas finitos (PDF) (Informe técnico). Universidad Tecnológica de Eindhoven . Informe de Ciencias de la Computación 93/43.
  6. R. McNaughton, H. Yamada (marzo de 1960). "Expresiones regulares y grafos de estados para autómatas". IEEE Transactions on Electronic Computers . 9 (1): 39– 47. Bibcode : 1960IRTEC...9...39M . doi : 10.1109/TEC.1960.5221603 .
  7. Cox, Russ. "La coincidencia de expresiones regulares puede ser simple y rápida (pero es lenta en Java, Perl, PHP, Python, Ruby, ...)" . Switchboard . Consultado el 25 de febrero de 2025 .