Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Introduccion A Los Automatas
1 Introduccion A Los Automatas
En las dcadas de los aos cuarenta y cincuenta, una serie de investigadores estudiaron las mquinas ms simples, las
cuales todava hoy denominamos "autmatas finitos". Tambin a finales de la dcada de los cincuenta, el lingista N.
Chomsky inici el estudio de las "gramticas" formales. Aunque no son mquinas estrictamente, estas gramticas estn
estrechamente relacionadas con los autmatas abstractos y sirven actualmente como base de algunos importantes
componentes de software, entre los que se incluyen componentes de los compiladores.
En 1969, S. Cook ampli el estudio realizado por Turing sobre lo que se poda y no se poda calcular. Cook fue capaz de
separar aquellos problemas que se podan resolver de forma eficiente mediante computadora de aquellos problemas que, en
principio, pueden resolverse, pero que en la prctica consumen tanto tiempo que las computadoras resultan intiles para
todo excepto para casos muy simples del problema. Este ltimo tipo de problemas se denominan "insolubles" o "NP-
difciles".
Son varias las razones por las que el estudio de los autmatas y de la complejidad de clculo constituyen una parte
importante del ncleo de la Ciencias de la Computacin.
Los autmatas finitos constituyen un modelo til para muchos tipos de hardware y software. Enumeramos algunos de
los ejemplos ms importantes:
1. Software para disear y probar el comportamiento de circuitos digitales.
2. El "analizador lxico" de un compilador tpico, es decir, el componente del compilador que separa el texto de entrada
en unidades lgicas, tal como identificadores, palabras clave y signos de puntuacin.
3. Software para explorar cuerpos de texto largos, como colecciones de pginas web, o para determinar el nmero de
apariciones de palabras, frases u otros patrones.
4. Software para verificar sistemas de todo tipo que tengan un nmero finito de estados diferentes, tales como protocolos
de comunicaciones o protocolos para el intercambio seguro de informacin.
Un boceto de lo que es y lo que hace un autmata finito puede ser: existen muchos sistemas o componentes, como los
que hemos enumerado anteriormente, que pueden encontrarse siempre en uno de una serie de "estados" finitos. El
propsito de un estado es el de recordar la parte relevante del historial del sistema. Puesto que slo existe un nmero finito
de estados, generalmente, no es posible recordar el historial completo, por lo que el sistema debe disearse
cuidadosamente, con el fin de recordar lo que es importante y olvidar lo que no lo es. La ventaja de disponer de slo un
nmero finito de estados es que podemos implementar el sistema mediante un conjunto fijo de recursos. Por ejemplo,
podramos implementarlo por hardware como un circuito, o como una forma simple de programa que puede tomar
decisiones consultando slo una cantidad limitada de datos o utilizando la posicin del propio cdigo para tomar la
decisin.
1
EJEMPLO 1.1
Los estados estn representados mediante crculos; en este ejemplo, hemos denominado a los estados on y off. Los arcos
entre los estados estn etiquetados con las "entradas", las cuales representan las influencias externas sobre el sistema, e
indican a que estado pasa el autmata partiendo de un estado dado y recibiendo una entrada concreta. Uno de los estados se
designa como el "estado inicial", el estado en el que el sistema se encuentra inicialmente.
A menudo es necesario especificar uno o ms estados como estado "final" o "de aceptacin". Llegar a uno de estos
estados despus de una secuencia de entradas indica que dicha secuencia es correcta. Los estados de aceptacin se indican
mediante un crculo doble.
EJEMPLO 1.2
Autmata finito que podra formar parte de un analizador lxico. El trabajo de este autmata consiste en reconocer la
palabra clave then, por lo que necesita cinco estados, representando cada uno de ellos la posicin dentro de dicha palabra
que se ha alcanzado hasta el momento.
Existen dos importantes notaciones que no son las utilizadas normalmente con los autmatas, pero que desempean un
importante papel en el estudio de los autmatas y sus aplicaciones.
l. Las gramticas son modelos tiles en el diseo de software que sirve para procesar datos con una estructura recursiva.
El ejemplo ms conocido es el de un "analizador sintctico" (parser), el componente de un compilador que se ocupa de las
funciones anidadas recursivamente de los lenguajes de programacin tpicos, tales como expresiones aritmticas,
condicionales, etc. Por ejemplo, una regla gramatical como E => E + E establece que una expresin puede formarse
tomando cualesquiera dos expresiones y conectndolas mediante un signo ms;
2. Las expresiones regulares tambin especifican la estructura de los datos, especialmente de las cadenas de texto. El
estilo de estas expresiones difiere significativamente del de las gramticas. Veamos a continuacin un ejemplo simple de
esto. La expresin regular estilo UNIX '[A- Z] [a-z]*[ ] [A-Z] [A-Z], representa palabras que comienzan por una letra
mayscula, seguida de cualquier cantidad de letras minsculas, un espacio y dos letras maysculas.
Los autmatas son esenciales para el estudio de los lmites de la computacin. Como hemos indicado en la introduccin
del captulo, existen dos factores importantes a este respecto:
l. Qu puede hacer una computadora? Esta rea de estudio se conoce como "decidibilidad", y los problemas que una
computadora puede resolver se dice que son "decidibles".
2. Qu puede hacer una computadora de manera eficiente? Esta rea de estudio se conoce como "intratabilidad", y los
problemas que una computadora puede resolver en un tiempo proporcional a alguna funcin que crezca lentamente con
el tamao de la entrada se dice que son "tratables".
Un alfabeto es un conjunto de smbolos finito y no vaco. Convencionalmente, utilizamos el smbolo para designar
un alfabeto. Entre los alfabetos ms comunes se incluyen los siguientes:
1. = {0, 1}, el alfabeto binario.
2. = {a,b , .. . ,z}, el conjunto de todas las letras minsculas.
3. El conjunto de todos los caracteres ASCII o el conjunto de todos los caracteres ASCII imprimibles.
Una cadena de caracteres (que tambin se denomina en ocasiones palabra) es una secuencia finita de smbolos
seleccionados de algn alfabeto.
La cadena vaca
La cadena vaca es aquella cadena que presenta cero apariciones de smbolos. Esta cadena, designada por , es una
cadena que puede construirse en cualquier alfabeto.
Potencias de un alfabeto
Si es un alfabeto, podemos expresar el conjunto de todas las cadenas de una determinada longitud de dicho alfabeto
utilizando una notacin exponencial. Definimos k para que sea el conjunto de las cadenas de longitud k, tales que cada
uno de los smbolos de las mismas pertenece a .
Por convenio, el conjunto de todas las cadenas de un alfabeto se designa mediante * . Por ejemplo,
{0,1}* = { , 0, 1, 00, 01, 10, 11, 000,... }. Expresado de otra forma:
* 0 1 2 ... .
En ocasiones, desearemos excluir la cadena vaca del conjunto de cadenas. El conjunto de cadenas no vacas del alfabeto
se designa como . Por tanto, dos equivalencias apropiadas son:
1 2 3 ... .
* { } .
Concatenacin de cadenas
Sean x e y dos cadenas. Entonces, xy denota la concatenacin de x e y, es decir, la cadena formada por una copia de x
seguida de una copia de y.
EJEMPLO 1.25
Sean x = 01101 e y = 110. Entonces xy = 01101110 e yx = 11001101. Para cualquier cadena w, tenemos las ecuaciones
w = w = w. Es decir, es el elemento neutro de la concatenacin.
1.5.3 Lenguajes
3
{ } , el lenguaje que consta slo de la cadena vaca, tambin es un lenguaje de cualquier alfabeto. Observe que 0
{ } ; el primero no contiene ninguna cadena y el segundo slo tiene una cadena.
La nica restriccin importante sobre lo que puede ser un lenguaje es que todos los alfabetos son finitos. De este modo,
los lenguajes, aunque pueden tener un nmero infinito de cadenas, estn restringidos a que dichas cadenas estn formadas
por los smbolos que definen un alfabeto finito y prefijado.
1.5.4 Problemas
Es un lenguaje o un problema?
Lenguajes y problemas son realmente la misma cosa. El trmino que empleemos depende de nuestro punto de vista.
+ Autmatas finitos. Los autmatas finitos utilizan estados y transiciones entre estados en respuesta a las entradas.
Resultan tiles para construir diversos tipos de software, incluyendo el componente de anlisis lxico de un compilador y
los sistemas que permiten verificar la correccin de, por ejemplo, circuitos o protocolos.
+ Expresiones regulares. Definen una notacin estructural que permite describir los mismos patrones que se pueden
representar mediante los autmatas finitos. Se emplean en muchos tipos comunes de software, incluyendo herramientas
para la bsqueda de patrones, por ejemplo, en textos o en nombres de archivo.
+ Gramticas independientes del contexto. Definen una importante notacin para describir la estructura de los lenguajes
de programacin y de los conjuntos relacionados de cadenas de caracteres; resultan tiles en la construccin del analizador
sintctico de un compilador.
+ Mquinas de Turing. Son autmatas que modelan la potencia de las computadoras reales. Nos permiten estudiar la
decidibilidad, es decir, el problema de qu puede o no puede hacer una computadora. Tambin nos permiten distinguir los
problemas tratables (aquellos que pueden resolverse en un tiempo polinmico) de los problemas intratables (los que no se
pueden resolver en un tiempo polinmico).
+ Lenguajes y problemas. Un lenguaje es un conjunto (posiblemente infinito) de cadenas, donde los smbolos smbolo de
todas ellas se han seleccionado de un determinado alfabeto. Cuando las cadenas de un lenguaje se interpretan de alguna
manera, la cuestin de si una cadena pertenece o no al lenguaje se dice, en ocasiones, que es un problema.