Vous êtes sur la page 1sur 7

Pablo Estrada

12121

Informe Proyecto #1

1. Diseo de la Aplicacin:

Clase Propsito
AFD Es la clase encargada de transformar un AFN a
AFD. Tiene dependencias con EstadoAFD y
PunteroAFD
AFN La clase tiene 2 propsitos, crear el AFN con el
mtodo de Thompson y transformar la
expresin ingresada por el usuario a postfix
para poder ejecutar el algortimo de Thomson.
Posee dependencias con las clases Puntero y
Estado
Estado Representa un estado del AFN, posee
atributos como sus salidas(de tipo Puntero) y
booleanas para saber si son iniciales, de
aceptacin y si han sido revisados.
EstadoAFD Posee las mismas caractersticas que un
Estado, pero adicionalmente se agrega un
atributo que es un conjunto de Estados del
AFN. Se utiliza en la construccin de AFN a
AFD
EstadoAFDDirecto Posee las mismas caractersticas que un
Estado, pero adicionalmente se agrega un
atributo que es un conjunto de Nodos del
rbol sintctico. Se utiliza en la construccin
directa de AFD
Main Clase encargada de la obtencin de datos del
usuario y la generacin de los archivos de
texto de cada autmata. En este clase se
llaman todos los mtodos de construccin de
cada autmata
Minimizador Clase encargada de minimizar el AFD. Posee
dependencias con EstadoAFD.
Nodo Cada uno de los elementos utilizados para
construir el rbol sintctico. Posee atributos
como posicin carcter y si es una hoja
Puntero Representa una transicin entre dos estados
del AFN. Posee de atributos un Estado y el
carcter con el que se llega a este.
PunteroAFD Posee las mismas caractersticas que Puntero,
pero para objetos de tipo EstadoAFD.
PunterAFDDirecto Posee las mismas caractersticas que Puntero,
pero para objetos de tipo EstadoAFDDirecto
SubAutomata Clase que se utiliza para encapsular un
conjunto de estados del AFN. Posee como
atributos el estado inicial y una lista de
punteros hacia nulo.
SyntaxTreeAFD La clase encargada de la construccin del
rbol, firsPos,LatPos, followPos y
nullable,adems de la generacin del AFD a
partir del rbol construido.

La aplicacin fue diseada basndonos en tres objetos bsicos, estados, punteros y subautomatas. Con
los atributos de estos tres objetos fue posible crear el AFN utilizando la construccin de Thompson. Para
la transformacin de AFN a AFD se utilizaron conjuntos y atributos booleanos agregados a los estados
para identificar aquellos que han sido marcados durante la ejecucin del algoritmo.
Para la construccin directa fue necesaria una nueva estructura de datos, un rbol binario. El nodo del
rbol posee como atributos un carcter, un booleanos para identificar al nodo como hoja y una posicin
en caso de ser hoja, adems de sus hijos y su padre, como cualquier otro rbol. Los nodos se construyen
de manera similar al algoritmo de Thompson, utilizando pilas. Luego para el clculo de followpos fue
necesaria la creacin de un mtodo recursivo que recorriera el rbol en un in-order traversal. Con el
followpos calculado ya fue posible realizar la construccin de estados en base a las posiciones de las
hojas.
Para la minimizacin se opto por el mtodo de particiones y fue necesario agregar un nuevo atributo al
objeto estado para identificar los estados representativos en un subconjunto de la particin P. Adems
se programaron operaciones bsicas de conjuntos como la interseccin y la diferencia.
Finalmente las simulaciones fueron realizadas de manera bastante similar en cada autmata. La nica
diferencia significativa fue la necesidad de computar e-closure en el AFN para poder obtener los estados
a los que llegamos con el carcter psilon.



2. Ejemplos y pruebas realizadas:
Prueba #1 AFN :(a*|b*)c





Prueba#2 AFN :(b|b)*abb(a|b)*




Prueba#3 AFN: (a|b)*a(a|b)(a|b)




Pruebas con AFN, AFD y AFD directo
Pureba #4 Expresion: 0(0|1)*0
AFN:
Estados: {0--6--5--8--1--2--9--4--3--7--}
Aceptatcion: {9}
Inicial: {0]
Transiciones: {0,0,6} --- {6,3,5} --- {6,3,8} --- {5,3,1} --- {5,3,2} --- {8,0,9} --- {1,0,3} --- {2,1,4} --- {4,3,7} ---
{3,3,7} --- {7,3,5} --- {7,3,8} ---
Simbolos: {0--1--}
Tiempo Creacion: 21074590 nanoSegundos

AFD:

ESTADOS: { 0--> {0- }2--> {1-2-5-3-8-9-7- }1--> {1-2-5-6-8- }3--> {1-2-5-4-8-7- } }
SIMBOLOS: { 0 1 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 2
TRANSICIONES: { {0,0,1} {2,0,2} {2,1,3} {1,0,2} {1,1,3} {3,1,3} {3,0,2} }
SIMBOLOS: 0 1
Tiempo Creacin: 2983288 nanoSegundos

AFD Directo:
ESTADOS: { 0 - 2 - 1 - }
SIMBOLOS: { 0 1 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 2
TRANSICIONES: { {0,0,1} {2,0,2} {2,1,1} {1,0,2} {1,1,1} }
SIMBOLOS: 0 1
Tiempo Creacion: 2883447 nanoSegundos





String AFN / Tiempo(Ns) AFN a AFD /
Tiempo(Ns)
AFD Directo/
Tiempo(Ns)
01110 Aceptado/ 172802 Aceptado /45654 Aceptado / 3797
01 No Aceptado / 87894 No Aceptado / 23467 No Aceptado / 23467
00 Aceptado / 86187 Aceptado / 20480 Aceptado / 21334

Prueba # 5- Expresion: (0|1)1*(0|1)
AFN:
Estados: {4--1--0--3--2--6--12--5--7--8--9--11--10--13--}
Aceptatcion: {13}
Inicial: {4]
Transiciones: {4,3,0} --- {4,3,1} --- {1,1,3} --- {0,0,2} --- {3,3,6} --- {2,3,6} --- {6,3,5} --- {6,3,12} --- {12,3,8}
{12,3,9} --- {5,1,7} --- {7,3,5} --- {7,3,12} --- {8,0,10} --- {9,1,11} --- {11,3,13} --- {10,3,13} ---
Simbolos: {0--1--}
Tiempo Creacion: 3677056 nanoSegundos

AFN a AFD:

ESTADOS: { 0--> {1-0-4- }1--> {12-6-5-2-8-9- }2--> {3-12-6-5-8-9- }4--> {7-11-12-13-5-8-9- }3--> {13-10- } }
SIMBOLOS: { 1 0 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 4 3
TRANSICIONES: { {0,1,2} {0,0,1} {1,1,4} {1,0,3} {2,0,3} {2,1,4} {4,0,3} {4,1,4} }
SIMBOLOS: 1 0
Tiempo Creacion: 2859980 nanoSegundos

AFD:
ESTADOS: { 0 - 2 - 1 - 3 - }
SIMBOLOS: { 0 1 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 2 3
TRANSICIONES: { {0,0,1} {0,1,1} {1,0,2} {1,1,3} {3,1,3} {3,0,2} }
SIMBOLOS: 0 1
Tiempo Creacion: 2662431 nanoSegundos
String AFN / Tiempo(Ns) AFN a AFD /
Tiempo(Ns)
AFD Directo/
Tiempo(Ns)
01110 Aceptado/ 180909 Aceptado /41814 Aceptado / 94721
0 No Aceptado / 67841 No Aceptado / 20054 No Aceptado / 19201
10 Aceptado / 81067 Aceptado / 32000 Aceptado / 20480

Prueba # 6 Expresion: (01)*(10)*


AFN:
Estados: {2--0--6--1--4--8--5--3--7--}
Aceptatcion: {8}
Inicial: {2]
Transiciones: {2,3,0} --- {2,3,6} --- {0,0,1} --- {6,3,4} --- {6,3,8} --- {1,1,3} --- {4,1,5} --- {5,0,7} --- {3,3,0} ---
{3,3,6} --- {7,3,4} --- {7,3,8} ---
Simbolos: {0--1--}
Tiempo Creacion: 3413800 nanoSegundos

AFN a AFD:

ESTADOS: { 1--> {1- }3--> {0-6-4-3-8- }4--> {7-4-8- }2--> {5- }0--> {0-6-4-2-8- } }
SIMBOLOS: { 1 0 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 3 4 0
TRANSICIONES: { {1,1,3} {3,0,1} {3,1,2} {4,1,2} {2,0,4} {0,1,2} {0,0,1} }
SIMBOLOS: 1 0
Tiempo Creacion: 2536562 nanoSegundos




AFD:

ESTADOS: { 3 - 0 - 2 - 1 - }
SIMBOLOS: { 1 0 }
ESTADOS INICIALES: 0
ESTADOS ACEPTACION: 3 0
TRANSICIONES: { {3,1,2} {0,1,2} {0,0,1} {2,0,3} {1,1,0} }
SIMBOLOS: 1 0
Tiempo Creacion: 2654751 nanoSegundos









String AFN / Tiempo(Ns) AFN a AFD /
Tiempo(Ns)
AFD Directo/
Tiempo(Ns)
01010110 Aceptado/ 190722 Aceptado / 63574 Aceptado / 37120
1001 No Aceptado / 9216 No Aceptado / 35840 No Aceptado / 28161
01 Aceptado / 78081 Aceptado / 31147 Aceptado / 20054
Minimizacin AFD: (a|b)*abb

Tiempo de Creacin: 785929 nanoSegundos.
Comparacin de tiempos: (a|b)*abb
String AFD (Tiempo nanosegundos) AFD Mnimo (Tiempo
nanosegundos)
aaaaaaaaabb 35841 29867

3. Discusin:
Despus de realizar las pruebas con los 3 autmatas generado por los distintos mtodos. Se not que
con las 3 expresiones bajo prueba, el mtodo de construccin de AFN es el ms lento. Tanto el mtodo
de AFN a AFD como el de construccin directa de AFD poseen tiempos de construccin similares. Sin
embargo, hay que recordar que para el mtodo de construccin de AFN a AFD habra que sumar el
tiempo de construccin del AFN, ya que sin este es imposible realizar el algoritmo. Por estas razones se
concluye que para las construcciones, el mtodo de construccin directa de AFD es el ms eficiente.
En cuanto a las simulaciones, observamos que, de nuevo, el AFN es el ms lento al simular strings. Los
dos AFDs construidos poseen tiempos de simulacin muy similares. Dependiendo de los strings que se
ingresen, en ocasiones es ms eficiente el que fue construido directamente, mientras que en otras
ocasiones el construido a partir de un AFD es ms eficiente. A pesar de esto, las diferencias no son muy
grandes por lo que podemos decir que los tiempos de simulacin para ambos tipos de AFD son casi los
mismos.
Finalmente en cuanto a la minimizacin de AFD observamos que aunque la construccin del mismo
puede tomar bastante tiempo ya que se itera sobre todos los estados varias veces. La simulacin en
varias expresiones regulares se reduce considerablemente ya que el nmero de estados que posee el
autmata se reduce, simplificndose la comparacin de strings con el autmata.

Vous aimerez peut-être aussi