Documentos de Académico
Documentos de Profesional
Documentos de Cultura
enfoque prctico
15 de abril de 2012
ndice general
1. Introduccin
1.1.
1.2.
1.3.
1.4.
1.5.
.
.
.
.
.
. 5
. 7
. 9
. 10
. 11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
19
23
29
32
NDICE GENERAL
Captulo 1
Introduccin
La teora de la Computacin es un poco ms antigua que las computadoras electrnicas.
Uno de sus pioneros, Alan Turing, pudo anticipar el poder de las computadoras a travs de
un modelo conceptual en 1936. Otras disciplinas como la matemtica, losofa, lingstica,
biologa e ingeniera elctrica intervienen para completar sus teoras. Las teoras de bases son
dos: Teora de Autmatas y Teora de los Lenguajes Formales. En general, la Teora de la
Computacin facilita la comprensin de muchas reas de la ciencia de la computacin (como
los compiladores), adems:
1. Se utiliza en el diseo y construccin de aplicaciones importantes de software y hardware.
2. Ayuda a comprender que esperar del software.
3. Permite deducir si es posible resolver un problema (determinar los lmites de la computacin).
Adems, la comprensin de estas teoras representa en la prctica un conjunto de herramientas
muy tiles como alternativas simples y ecientes para resolver problemas.
CAPTULO 1.
INTRODUCCIN
Conjunto
Coleccin (no importa el orden) de objetos (elementos del mismo tipo) sin repeticin.
Existen 2 (dos) tipos de representacin de los conjuntos:
Por Extensin, se enumeran todos sus elementos, por ejemplo: {0, 1}
Por Comprensin, se dene de manera formal las caractersticas de sus elementos,
por ejemplo: { i | Para todo j entero i = 2j }
Unin: A B = {x | x en A o x en B}
Interseccin: A B = {x | x en A y x en B}
Diferencia: A - B = {x | x en A y x no est en B}
Conjunto Producto Producto Cartesiano: A B {(x,z) | x en A y z en B}. Si A
tiene n elementos y B tiene m elementos entonces A B tiene n m elementos y
A tiene 2n elementos.
Conjunto de Potencias 2A A , es el conjunto de todos los subconjuntos de A. Tambin
A es denominado
de Kleene de A. Las deniciones formales son: A
|A|
|A|Clausura
i
+
i
= i=0 A y A = i=1 A (clausura positiva que no incluye al conjunto vaco).
Donde Ai representa todos los subconjuntos de A con i elementos.
Ejemplo:
Dados los conjuntos A = {1,2} y B = {2,3}, se realizan las siguientes operaciones sobre
conjuntos:
A B = {1, 2, 3}
A B = {2}
A - B = {1}
A B = {(1,2),(1,3),(2,2),(2,3)}
2A = A = {,{1},{2},{1,2}}
1
Nota: es un smbolo que puede ser utilizado por algunos autores para denotar a la cadena vaca.
CAPTULO 1.
INTRODUCCIN
0
i
0
i
dene por = . Donde = {} y = i=1 . Adems se denota
el + = {}
e ) Sujo, Prejo: cualquier cadena al nal o comienzo respectivamente de la cadena.
Por ejemplo para la cadena w=abca, formada de = {a, b, c}, se tiene:
Los prejos de w= , a, ab, abc, abca
Los sujos de w= , a, ca, bca, abca
f ) Prejo (Sujo) propio, es cualquier Prejo (Sujo) que no sea la misma cadena.
}
Las cadenas formadas con 2 al aplicarle la cardinalidad: |001| = 2 y |1100| = 3
1.3.
JERARQUA DE CHOMSKY
10
CAPTULO 1.
INTRODUCCIN
Lenguaje
Recursivamente
enumerable
Dependiente del
Contexto
Mquina
Mquina de
Turing
Autmata
linealmente
acotado
Independiente
Autmata de
del Contexto
Pila
Lenguaje Regu- Autmata lar
nito
Gramtica G = (V,T,P,S)
Gramtica
sin restricciones (,
en (V T ) , contiene una variable)
Gramtica
al contexto (,
sensible
en (V
T ) , contiene una variable,
|| ||)
Gramtica libre
de contexto A (A en
V y en (V T) )
Gramtica Regular A aB, A a, (A,B
en V y a en T)
1.5.
11
decisin que motiv a Turing y a Church a dar origen a la Teora de la Computacin en 1936.
Un ejemplo tpico de este tipo de problema es la siguiente pregunta: Es primo un nmero
entero dado?, y una instancia de este problema sera: Es 17 un nmero primo?. Se trata de
entender al 17 como un elemento del conjunto de todos los nmeros enteros y se quiere saber
si pertenece al conjunto de los nmeros primos.
Lo anterior lleva a la pregunta de si realmente es posible reducir o redenir todos los problemas
a la forma de un problema de decisin. Para lo cual le sugiero platearse ejemplos e investigar
esta posibilidad, pues es en base a esta generalizacin de problemas sobre la cual funciona la
Teora de la Computacin. Esto puede parecer una desventaja, como lo menciona Hopcroft [2]:
. . . Un aspecto potencialmente poco satisfactorio de esta denicin de problema es
que normalmente no se piensa en los problemas como cuestiones de decisin (es
o no verdadero lo siguiente?) sino como solicitudes para calcular o transformar
algunos valores de entrada (encontrar la mejor forma para realizar esta tarea) . . .
Sin embargo, segn la computabilidad y complejidad las soluciones al problema de decisin y
al problema original se diferencian a lo sumo por un factor lineal y se puede decir que vale la
pena esta generalizacin de los problemas a cambio del formalismo que necesita la Ciencia de
la Computacin.
Esta teora de la computacin entonces va a denir los problemas en funcin de un lenguaje.
Justamente, el cuadro 1.1 muestra la jerarqua de Chomsky en donde se relacionan los tipos de
lenguajes (problemas) con el tipo de mquina (modelo) que reconoce cadenas que pertenecen a
cada tipo y a la gramtica (modelo) que genera las cadenas que pertenecen al tipo de lenguaje.
Dicha jerarqua estable una relacin inclusiva entre los lenguajes, asi, el lenguaje Tipo 3
Tipo 2 Tipo 1 Tipo 0. Esto quiere decir que los lenguajes Tipo 0 son el tipo de lenguaje
que abarca a todos los que se pueden resolver a travs de una Mquina de Turing (la ms
poderosa).
12
CAPTULO 1.
INTRODUCCIN
poderosa en la medida que soluciona problemas sin importar como lo hace (no importa
la eciencia en tiempo y recursos, sino su efectividad en lograr resolver el problema). En
los trminos del paradigma, si una mquina reconce lenguajes ms complejos ser ms
podedora, segn la Jerarqua de Chomsky la mquina que reconoce el lenguaje tipo 0 es
la ms poderosa.
Ejercicios resueltos
1. Diferencia entre el operador clausura de Kleene aplicado sobre un conjunto y sobre un
alfabeto. Por ejemplo: El conjunto A = {a,b} cul es el A* y para el alfabeto B = {a,b}
cul es B*.
La diferencia se debe a que el operador estrella o clausura de Kleene es polimrco.
Aunque A y B son el mismo conjunto, se interpretan de forma diferente para el operador.
En el caso de A es un conjunto de elementos y A* es el conjunto de todos sus subconjuntos,
A es nito y A* tambin, A* = {, {a}, {b}, {a, b}}. En el caso de B, es interpretado
como un alfabeto, es decir un conjunto nito de smbolos. Aplicando el mismo operador
a B nos d un conjunto innito, B* = {, a, b, aa, ab, ba, bb, aaa, aab, aba, ... } (se
est formando el conjunto de todas las cadenas, incluyendo la cadena vaca, que se puede
formar con el alfabeto B).
2. Considere el proceso de compilacin de un programa escrito en un lenguaje de programacin. Identique el alfabeto, cadena, lenguaje y problema segn la Teora de la
Computacin.
El problema de la compilacin de un programa escrito en algn lenguaje de programacin
puede ser visto a travs del paradigam de lenguajes formales que contiene la Teora de
la Computacin. El compilador no es ms que un sistema que es capaz de ver si una entrada (el cdigo fuente) esta bien escrito y sigue las reglas del lenguaje de programacin
que est reconociendo. Es decir, el compilador es una mquina reconocedora de textos
(cdigos fuente) que pertenecen al conjunto de todos los cdigos escritos en un lenguaje
de programacin. De esta forma se denen:
El alfabeto : es el conjunto de smbolos que puede escribirse en un teclado de
computador con el cual puede escribirse texto (caracteres alfanumricos, caracteres
especiales, espacio, etc.).
Cadena de entrada w: La entrada del compilador visto como una mquina reconocedora, no es ms que cualquier texto que podamos escribir con el teclado del
computador (es decir con ). Cada cadena w se puede generar concatenando elementos de , de esta maneras tenemos innitas cadenas (textos)y entonces es
innito.
El lenguaje L: es el subconjunto de formado por las cadenas (texto) que siguen
las reglas de un lenguaje de programacin especco. El compilador reconoce un
lenguaje L innito pues las reglas de un lenguaje de programacin (aunque son
nitas) permiten escribir innitos programas que formaran parte de L.
El problema P: El compilador resuelve un problema de decisin al determinar si un
texto de entrada compila o no. Decir que un texto compila signica que pertenece
al lenguaje L de todas los posibles e innitos cdigos que pueden escribirse en
1.5.
13
Ejercicios propuestos
1. Qu es un lenguaje formal?, Diferencia con los lenguajes naturales
2. Contestar verdadero (V) o falso (F):
a ) es un lenguaje formado por el alfabeto.
b ) La clausura de Kleene sobre el alfabeto puede ser en algunos alfabetos un
conjunto nito.
c ) Dado
el alfabeto = {a,b} y = {0,1}, la cadena w = a1b0 pertenece al alfabeto
a ) A (B C) y AB
b ) A*B* y (AB)*
AC
14
CAPTULO 1.
INTRODUCCIN
Captulo 2
15
16
CAPTULO 2.
En los AFD debe cumplirse que: Para toda a que esta en existe exactamente una transicin
de salida de cada estado, es decir la funcin de transicin dado un estado y un valor de entrada
se obtiene como resultado siempre un solo valor (estado).
Las siguientes son las tres formas para expresar y representar la funcin de transicin, las
cuales son equivalentes entre si, cualquiera de ellas es suciente para completar el diseo del
AFD:
1. Diagrama de Transicin: representado a travs de un grafo. Un grafo G = (V,E)
consiste de un conjunto nito de vrtices (o nodos) V y un conjunto nito de pares de
vrtices (o aristas) E llamados enlaces (los cuales son bidireccionales).
Un camino en un grafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que hay
un enlace (Vi ,Vi+1 ) con 1 i k. La longitud del camino es k-1. Si V1 = Vk entonces
el camino es un ciclo.
Una clase de grafo dirigido Dgrafo G =(V,E), consiste en un conjunto nito de vrtices
V (o nodos) y un conjunto nito de pares ordenados de vrtices E llamados arcos (una
sola direccin). Un arco de v a w se denota como v w.
Un camino en un dgrafo es una secuencia de vrtices V1 , V2 , ... , Vk , con k 1, tal que
Vi Vi+1 es un arco con 1 i k. La longitud del camino es k-1. El camino es de V1
a Vk (importa la direccin). Si v w es un arco entonces v es predecesor de w y w es
sucesor de v.
Ejemplo: Dado el Grafo G = ({1,2,3,4}, {i j | i < j })
1,2,3,4 es un camino de longitud 3 de 1 a 4.
1,4 es un camino de longitud 1 de 1 a 4.
3,3 no es un camino.
3 es un camino de longitud 0 de 3 a 3?
Por notacin, dado un AFD si p y q estan en Q y a en , se dene la transicin (q,a) =
p. como un arco (enlace) etiquetado a entre el estado (vrtice) q y el estado (vrtice) p.
Los estados o vrtices de aceptacin se denotan grcamente con un doble crculo. Por
ejemplo si r esta en F debe ser denotado con doble crculo como se observa en la gura
2.1.
2.1.
17
Smbolos de
Estados
Estados
todas las cadenas binarias que comienzan con 0. El AFD que lo reconoce, en sus tres representaciones, es el siguiente:
M = (Q, , , q0 , F)
Donde Q = {q0 , q1 , q2 }, = {0,1} y F = {q1 }
1. Diagrama de transicin: se observa en la gura 2.2.
Figura 2.2: Ejemplo de AFD: cadenas binarias que comienzan con cero
1
Dada f:A B, la funcin inversa f 1 :B A, se dene como f 1 (b) = {x | x en A y f(x) = b } para todo
b en B
18
CAPTULO 2.
q0
* q1
q2
q1
q1
q2
q2
q1
q2
2. Funcin de transicin
(q0 , 0) = q1
(q0 , 1) = q2
(q1 , 0) = q1
(q1 , 1) = q1
(q2 , 0) = q2
(q2 , 1) = q2
2.1.
19
2. b(q0 ,101)
b 0 ,10),1)
= ((q
b 0 ,1),0),1)
= (((q
b 0 , ),1),0),1)
= ((((q
(((q0 , 1), 0), 1) ((q2 , 1), 0) (q2 , 0) = q2 No se acepta al terminar de procesar la cadena 101 y quedar en un estado que no es de aceptacin b(q0 ,101) = q2 (q2 no
est en F)
20
CAPTULO 2.
Cuadro 2.3: Tabla de transicin: Lenguaje de las cadenas binarias que terminan en 01
q0
q1
* q2
0
1
{q0 , q1 } {q0 }
{q2 }
1. Caso base para la cadena vaca : b(q,) = {q}. Es desde cualquier estado del autmata
la cadanea vaca no cambia de estado.
2. Paso recursivo para cadenas de cardinalidad mayor que 1: b(q,xa) = { r | para algn p
en b(q,x), (p,a) = r }. Sea w de la forma w = xa donde a es el smbolo nal (sujo de
longitud 1) de w y x el restode w.
b(q,x) = {p1 , p2 , ..., pn } sea ki=1 (pi ,a) = {r1 , r2 , ..., rn }
Entonces b(q,x) = (b(q,x),a) = {r1 , r2 , ..., rn }, ver gura 2.4.
La extensin
para b de Q x:
2.1.
21
({q0 , q1 },1) = (q0 ,1) (q1 ,1) = {q0 } {q2 } = {q0 , q2 }, Acepto porque {q0 , q2 }
{q2 } = , es decir al menos uno de los estados del autmata es de aceptacin (pertenece
a F) luego de procesar la cadena.
b 0 ,10101) = ((q
b 0 ,1010),1) = ((((((q
b 0 , ),1),0),1),0),1)
2. (q
((((({q0 },1),0),1),0),1), ({q0 },1) = {q0 }
(((({q0 },0),1),0),1), ({q0 },0) = {q0 , q1 }
F = }
Es el conjunto de cadenas pertenecientes a tal que ejecutar el AFND desde el estado inicial
b 0 ,w) contiene al menos un estado de
q0 con la cadena w, la funcin de transicin extendida (q
aceptacin (es diferente del vaco la interseccin con F).
Teorema 1. Si L es aceptado por un AFND entonces existe un AFD que acepta L (es decir,
ambos aceptan la misma clase de lenguaje: lenguajes regulares).
22
CAPTULO 2.
Cuadro 2.4: Tabla de transicin N : Lenguaje de las cadenas binarias que terminan en 01
N
q0
q1
* q2
0
1
{q0 , q1 } {q0 }
{q2 }
pS N (p,a).
Ejemplo: Dado el AFDN de la gura 2.5 y el cuadro 2.4 denotado como N = (QN , , N , q0 ,
FN ), con = {0,1} y QN = {q0 , q1 , q2 }, FN = {q2 }. Obtener D un AFD tal que L(N) = L(D)
a travs del algoritmo de construccin de subconjuntos.
Figura 2.6: Relacin AFDN y AFD: construccin de subconjunto sobre el AFND de la gura
2.5
1. = {0, 1}
2. D = (QD , , D , {q0 }, FD )
3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q0 , q2 }, {q1 , q2 }, {q0 , q1 , q2 }} (Conjunto de todos los
subconjuntos de Q)
2.1.
23
D
{q0 }
{q0 , q1 }
*{q0 , q2 }
0
{ q0 , q 1 }
{ q0 , q 1 }
{ q0 , q 1 }
1
{ q0 }
{ q0 , q 2 }
{ q0 }
= {q0 } = {q0 }
24
CAPTULO 2.
{} Q .
2.1.
25
q0
q1
* q2
0
{ q0 }
{q1 }
{q2 }
{q1 }
{q2 }
Base: -clausura(q) = {q} , es decir por denicin b(q,) = {q}, podemos imaginarnos
un bucle de un estado a si mismo etiquetado . Ver gura 2.9.
Paso inductivo: Si b es la funcin de transicin de AFND- y p est en la -clausura(q),
es decir b(q, ) = {p} entonces la -clausura(q) tambin contiene los estados b(p,). Ver
gura 2.9.
cada p en P.
qenR
(q,a), R Q
26
CAPTULO 2.
F = }
2.1.
27
FE = }
4. D (S,a) para
todo a en y S en QD , se cumple:
D (S,a) = nj=1 -clausura(rj ),
{r1 , r2 , ..., rn } = ki=1 E (pi ,a) con S = {p1 , p2 , ..., pk }. Ver gura 2.11
28
CAPTULO 2.
D
{q0 , q1 , q2 }
{ q1 , q 2 }
*{q2 }
0
{q0 , q1 , q2 }
1
{ q1 , q 2 }
{ q1 , q 2 }
2
{ q2 }
{ q2 }
{ q2 }
Ejemplo: Dado el AFND- E de la gura 2.8, encontrar un AFD equivalente que reconozca
el mismo lenguaje.
E = (Q, , , q0 , F), donde Q = {q0 , q1 , q2 }, = {0, 1, 2} y F = {q2 }. Se obtiene el AFD D
= (QD , , D , q0D , FD ), aplicando el algorimos de construccin de subconjuntos de :
1. = {0, 1, 2}
2. q0D = -clausura(q0 ) = {q0 , q1 , q2 }
3. QD = {, {q0 }, {q1 }, {q2 }, {q0 , q1 }, {q1 , q2 }, {q0 , q2 }, {q0 , q1 , q2 }}
4. FD = {{q2 }, {q1 , q2 }, {q0 , q2 }, q0 , q1 , q2 }
5. Clculo de D : (ver cuadro 2.7)
Para el estado inicial {q0 , q1 , q2 } se aplica ladenicinpara todos los elementos de :
* D ({q0 , q1 , q2 },0) = -clausura(E (q0 , 0) E (q1 , 0) E (q2 , 0)) = -clausura({q0 } )
= -clausura({q0 }) = -clausura(q0 ) = {q0 , q1 , q2 }
* D ({q0 , q1 , q2 },2) = -clausura(E (q0 , 2) E (q1 , 2) E (q2 , 2)) = -clausura( {q2 })
= -clausura({q2 }) = -clausura(q2 ) = {q2 }
Para el estado {q1 , q2 } se aplica la denicin
para todos los elementos
de :
* D ({q1 , q2 },0) = -clausura(E (q1 , 0) E (q2 , 0)) = -clausura( ) = -clausura()
=
* D ({q1 , q2 },1) = -clausura(E (q1 , 1) E (q2 , 1)) = -clausura({q1 } ) = clausura({q1 }) = -clausura(q1 ) = {q1 , q
2}
* D ({q1 , q2 },2) = -clausura(E (q1 , 2) E (q2 , 2)) = -clausura( {q2 }) = clausura({q2 }) = -clausura(q2 ) = {q2 }
Para el estado {q2 } se aplica la denicin para todos los elementos de :
* D ({q2 },0) = -clausura(E (q2 , 0)) = -clausura() =
* D ({q2 },1) = -clausura(E (q2 , 1)) = -clausura() =
* D ({q2 },2) = -clausura(E (q2 , 2)) = -clausura({q2 }) = -clausura(q2 ) = {q2 }
Hay dos formas de interpretar la construccin de subconjuntos-, una para crear un AFD y
otra AFND. La idea es llegar a un AF ms fcil de implementar (es decir obtener un AFD).
AFD: Se toma cada estado como un conjunto de etiquetas. Ver gura 2.12
AFND: Se interpreta el contenido de la etiqueta de cada estado. Ver gura 2.13
2.1.
29
Figura 2.12: AFD equivalente del AFND- de la gura 2.8 a travs de la Construccin de
subconjuntos
Figura 2.13: AFND equivalente del AFND- de la gura 2.8 a travs de la Construccin de
subconjuntos
30
CAPTULO 2.
=
=
=
=
=
=
q0
q0
q1
q1
q2
q2
y
y
y
y
y
y
a
a
a
a
a
a
=
=
=
=
=
=
0:
1:
0:
1:
0:
1:
S
S
S
S
S
S
=
=
=
=
=
=
q1
q2
q1
q1
q2
q2
fin Seleccin
Retornar S
fin Funcin
Donde se asume que se tiene los siguientes tipos de datos: Conjunto (paramtrico por el
tipo de elemento), Estado, Simbolo. Para ellos se tiene las siguientes operaciones:
LeerSimboloCadena() que permite obtener desde la entrada estndar un Smbolo de la
junto que determina si el elemento A (del tipo Estado) pertenece al Conjunto de Estados
B.
Una posible implementacin del algoritmo anterior en lenguaje C se muestra a continuacin:
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
enum estados { q0, q1, q2 };
void transicion(enum estados *estado, char a) // funcin de transicin
{
switch(*estado) {
case q0:
if(a == '0') {
2.1.
putchar(a);
*estado = q1;
}
else {
if(a == '1') {
putchar(a);
*estado = q2;
}
}
break;
case q1:
if(a == '0' || a == '1') {
putchar(a);
*estado = q1;
}
break;
case q2:
if(a == '0' || a == '1') {
putchar(a);
*estado = q2;
}
break;
}
}
int main()
{
char c;
string cad;
enum estados state = q0;
cout << "AFD que reconoce todas las
cout << "Estado inicial: " << state
c = getchar();
cad = c;
while((c == '0') || (c == '1')) {
transicion(&state, c);
cout << " Estado actual: " << state
c = getchar();
if ((c == '0') || (c == '1')) cad =
}
if (state == q1) cout << "La cadena
else cout << "La cadena " << cad <<
return 0;
}
31
<< endl;
cad + c;
" << cad << " SI esta en el lenguaje" << endl;
" NO esta en el lenguaje" << endl;
32
CAPTULO 2.
2.1.
33
son diferentes en todo sentido y por tanto no son iguales. Sin embargo, estos autmatas
diferentes, M1 = M2 , son capaces de procesar cadenas de y reconocer el mismo
lenguaje L (todas y cada una de las cadenas que forman a L, ni una ms ni una menos),
en ese caso son llamados autmatas equivalentes, es decir L(M1 ) = L(M2 ).
Ejercicios resueltos
1. Determine las diferencias entre un AFD y un AFND. Ver el cuadro 2.8
2. Aplicaciones de la vida real que pueden ser vistos como AF. Algunas aplicaciones interesantes de los AF estn referidas al almacenamiento de diccionarios como los usados en
los celulares, en la que se utilizan sus caractersticas para hacer bsquedas, inserciones o
modicaciones rpidas. As como tambin para mejorar el ordenamiento y bsqueda en
otros tipos de aplicaciones como los circuitos digitales, texto, secuencias lgicas de funcionamiento (como la maquinaria industrial, robtica) y otras. Tambin son tiles para
el modelado de aquellos casos en los que a partir de una accin anterior se puede llegar a
un conjunto determinado de destinos, pero no se tiene certeza anticipada de cul de ellos
es el indicado, utilizados para modelar protocolos de comunicacin, sistemas distribuidos,
planicacin, etc.
3. Modelar un AF que reconozca un identicador vlido en el lenguaje de programacin C.
Un identicador es un nombre que dene a una variable, una funcin o un tipo de datos.
Un identicador vlido ha de empezar por una letra o por el carcer de subrayado _,
seguido de cualquier cantidad de letras, dgitos o subrayados. Adems: No debe contener
caracteres especiales, tales como @, $, #, no debe haber espacios en blanco en los identicadores.
El AF que reconoce este lenguaje es el siguiente:
A = (Q, , , q0 , F), donde Q = {q0 , q1 }, son todos los caracteres alfanumricos y caracteres especiales permitidos (tales como -,_,.) , F = {q1 }, y se expresa en el diagrama
de transicin de la gura 2.14 , donde se observa dos conjuntos de caracteres:
A = conjunto de caracteres alfabticos
B = conjunto de caracteres alfabticos, numricos y subrayados
34
CAPTULO 2.
AFD
: Q x Q, rango es un elemento
de Q
L(M)={w|w y b(q0 ,w) F },
Lenguaje regular L reconocido por
el AFD M
Un solo estado actual en cada paso
del autmata
Condicin del Desde cada estado existe una trandiagrama de sicin de salida por cada smbolo de
transicin
Condicin de Cada posicin de la celda de la tala tabla de bla debe tener slo un estado (estar
transicin
completa)
Utilidad
Los AFD son los que se implementan para el reconocimiento de lenguajes regulares, se usan para simular AFND
AFND
: Q x Q , rango es un subconjunto de Q
b 0 ,w) F =
L(M)={w|w y (q
}, Lenguaje regular L reconocido
por el AFND M
El estado actual puede ser un conjunto de estados (subconjunto de
Q), es deir mltiples estados simultaneamente
No hay restricciones con respecto a
las transiciones, un smbolo de
puede tener 0, 1 o ms transciones
de salida desde el mismo estado
Las posiciones de las celdas pueden
tener cualquier subconjunto de Q
(incluyendo el ).
Los AFND se utilizan en lenguajes regulares con alfabetos grandes y
muchos estados, pues es ms sencillo de modelar, tiene relacin directa
con las expresiones regulares y son
utiles para aplicar operaciones sobre
autmatas
El modelo de un AFND es sencillo
pues no exige evaluar todo en cada estado, al contrario puede considerar solo las opciones que aceptan las cadenas y muestra un diseo ms sencillo. Por el contrario, su
implementacin requiere simular las
alternativas simultneas en cada paso de transicin (bsqueda en un rbol realizando backtracking) y puede hacer complejo y poco eciente
su programacin e implementacin
2.1.
35
Ejercicios propuestos
1. Para = {0,1} construya un AFD que acepte los siguientes lenguajes:
a ) El conjunto de cadenas que tiene 011 como subcadena.
b ) El conjunto de todas las cadenas cuyo tercer elemento desde el extremo izquierdo
sea un 1.
c ) El conjunto de cadenas en las que el nmero de ceros es divisible por 3.
d ) El conjunto de cadenas que terminan con 01.
e ) El conjunto vaco.
f ) El conjunto de la cadena vaca.
36
CAPTULO 2.
q
r
*s
0
{p, q}
{r}
{s}
{s}
1
{p}
{r}
{s}
*q
r
*s
0
{q, s}
{r}
{s}
1
{q}
{q, r}
{p}
{p}
3. Obtenga un autmata nito (de cualquier tipo) para reconocer los siguientes lenguajes
apartir del alfabeto binario:
a)
b)
c)
d)
e)
f)
g)
h)
cadenas acabadas en 00
cadenas con dos unos consecutivos
cadenas que no contengan dos unos consecutivos
cadenas con dos ceros consecutivos o dos unos consecutivos
cadenas con dos ceros consecutivos y dos unos consecutivos
cadenas acabadas en 00 o 11
cadenas con un 1 en la antepenltima posicin
cadenas de longitud 4
M1 = ({p, q, r, s}, {0, 1}, , p, {s}) donde est dada por el cuadro 2.9
M2 = ({p, q, r, s}, {0, 1}, , p, {q, s}) donde est dada por el cuadro 2.10
M3 = ({p, q, r}, {a, b, c}, , p, {r}) donde est dada por el cuadro 2.11
M4 = ({q0 , q1 , q2 , q3 , q4 }, {a, b}, , q0 , {q4 }) donde est dada por el cuadro 2.12
2.1.
37
q
*r
a
{p}
{q}
{r}
{p}
{q}
b
{q}
{r}
c
{r}
{p}
q0
q1
q2
q3
q4
a
b
{q1 , q2 } {q1 , q3 }
{q3 }
{q4 }
{q4 }
38
CAPTULO 2.
Bibliografa
[1] Alonzo Church: A note on the Entscheidungsproblem. Journal of Symbolic Logic. 1 (1936).
pp 40 - 41.
[2] Hopcroft, Rajeev Motwani, Jerey D. Ullman. Introduccin a la Teora de Autmatas y
Lenguajes Formales. PrenticeHall, 2002.
[3] Chacn, M. y Padrn, J. (1994) Qu es teora. Investigacin y Docencia. Caracas: Publicaciones del Decanato de Postgrado, USR.
[4] Seymour Lipschutz (1970) Teora de Conjuntos y Temas anes. macGraw-Hill
39