Sei sulla pagina 1di 9

AUTÓMATA FINITO DETERMINISTICO

La Teoría de Autómatas es una rama de la Teoría de la Computación que estudia las máquinas
teóricas llamadas autómatas. Estas máquinas son modelos matemáticos.

Un Autómata está formado por un conjunto de estados, uno de los cuales es el estado en el que la
máquina se encuentra inicialmente. Recibe como entrada una palabra (una concatenación de
símbolos del alfabeto del autómata) y según esta palabra la máquina puede cambiar de estados.

Los Autómatas se clasifican según el número de estados (finito o no), la forma en que se realiza el
cambio de estado (determinista o no), si acepta o no el símbolo vacío ε, si tiene o no una pila, etc.

Los Autómatas están estrechamente relacionados con la máquina de Turing (1936), de gran
importancia en la Teoría de la Computación. Esto se debe a que una máquina de Turing puede
simular el almacenamiento y la unidad de control de una computadora. Tenemos certeza de que lo
que no puede ser resuelto por una máquina de Turing no puede ser resuelto por una computadora
real.

Llamamos Autómata Finito Determinista a:

AFD= (Σ, S, f, I, F)

Siendo

 Σ el alfabeto, es decir, un conjunto finito de símbolos que formarán palabras o cadenas.

El conjunto de palabras que se pueden formar concatenando los símbolos de Σ se denota


por Σ*. La palabra vacía, que no está formada por ningún símbolo, forma parte de Σ*.

 S el conjunto finito de estados, que denotaremos por

q0, q1, q2,…

 f es la función de transición. Determina el comportamiento del autómata.

f (qi, a) = qj

Significa que si en el estado qi de S el autómata recibe el símbolo de entrada a de Σ,


entonces pasa al estado qj de S.

 I (q0) es el estado inicial, el estado en qué el autómata se encuentra inicialmente.

 F (FDC) es el subconjunto de S (por tanto, finito) que contiene los estados de


aceptación (o finales), que son los estados que provocan la parada del autómata.

Cuando se llega a uno de estos estados a través de una palabra w de Σ*, diremos que el
autómata acepta a dicha palabra (es una palabra del lenguaje del autómata).
Representación o Diagrama de un AFD

Representaremos los estados del AFD mediante círculos que encierran el nombre del estado (q0,
q1,...)

La posible transición

f (qi, x)=qj

x
q q

Se representa mediante una flecha que empieza en qi y termina en qj con la etiqueta "x".

Los círculos de los estados de aceptación tienen el borde doble.

El estado inicial, q0, se representa con una flecha que termina en dicho estado (pero no empieza en
ningún estado).

Lenguaje de un AFD

Llamamos lenguaje del autómata finito determinista A, L(A), al conjunto de palabras para las
cuales el autómata llega a un estado de aceptación.
JAVA

¿Qué es Java?

Es un lenguaje de programación y una plataforma informática comercializada por primera vez en


1995 por Sum Microsystems. Hay muchas aplicaciones y sitios web que no funcionarán a menos
que tenga Java instalado y cada día se crean más. Java es rápido, seguro y fiable. Desde portátiles
hasta centros de datos, desde consolas para juegos hasta súper computadoras, desde teléfonos
móviles hasta Internet, Java está en todas partes. Su nombre aparece siempre junto a una taza de
café, pero ¿qué es Java? ¿Para qué se utiliza? ¿Por qué ese logo? ¿En qué se diferencia de
JavaScript? ¿Qué debo hacer si quiero formarme en esta tecnología? Te damos respuesta en los
siguientes párrafos.

“Java es un lenguaje de programación y una plataforma informática comercializada por primera vez
en 1995 por Sun Microsystems”, así de fácil resume la propia web de Java qué es esta tecnología.

Nació con el objetivo de ser un lenguaje de programación de estructura sencilla que pudiera ser
ejecutado en diversos sistemas operativos. En lo que respecta a su nombre, inicialmente iba a
denominarse Oak pero como esta marca ya estaba registrada se acabó optando por Java.

Si tienes interés en conocer las anécdotas que se vinculan con la elección de este nombre te
recomendamos que lees este artículo “De Oak a Java, así evolucionó el nombre de esta tecnología”.
Te adelantamos que su logo dicen que se debe al tipo de café que tomaban sus creadores.

¿Para qué sirve Java?

Java sirve para crear aplicaciones y procesos en una gran diversidad de dispositivos. Se base en
programación orientada a objetivos, permite ejecutar un mismo programa en diversos sistemas
operativos y ejecutar el código en sistemas remotos de manera segura.

Su ámbito de aplicación es tan amplio que Java se utiliza tanto en móviles como en
electrodomésticos. Muchos programadores también utilizan este lenguaje para crear pequeñas
aplicaciones que se insertan en el código HTML de una página para que pueda ser ejecutada desde
un navegador.

¿Que se ha hecho con java?

Con el lenguaje Java se han hecho grandes programas que son famoso en la actualidad:

1º Eclipse: es el programa que usamos actualmente es uno de los más famosos. Significó un gran
avance en el mundo de la programación.

2ºAndroid: posiblemente es el sistema más usado y conocido en todo el mundo. Todo el mundo lo
conocerá por ser el sistema operativo más famoso de los móviles; una de las características más
importantes es que es gratis, es decir, cualquiera puede descargarlo, instalarlo o incluso modificarlo.

3º Nasa World-Wind: es un programa que actúa como un globo terráqueo virtual, o globo virtual
desarrollado por la NASA para ser usado en ordenadores personales con Microsoft Windows.
4º Netbeans: NetBeans es un entorno de desarrollo integrado libre, hecho principalmente para el
lenguaje de programación Java. Una diferencia grande con Eclipse es que con Netbeans puedes
crear interfaces gráficas más fácilmente.

5º Minecraft: es uno de los juegos más vendidos del mercado, esta aventura de personajes en forma
de cubos se ha hecho famosa en todo el mundo es uno de los temas más populares en Youtube.

6º OppenOffice: la alternativa más famosa al clásico Microsoft Office. Al no tener que comprarlo
tiene algunas desventajas en comparación con Microsoft Office, pero cada vez ofrece más.

7ºOpera Mini: el navegador Opera que teníamos en los ordenadores ahora ha pasado a dispositivos
móviles. La versión de Ordenador está hecha en C++, pero la de móviles está hecha en Java. Este
navegador se ha convertido en un gran competidor para los más populares.

8ºGeogebra: es un software matemático interactivo libre para la educación en colegios y


universidades, es básicamente un “procesador geométrico” y un “procesador algebraico”.

9º 4shared: Es un servidor para alojamiento de archivos, donde usuarios cargan sus archivos, dichos
usuarios reciben un link para que lo publiquen y por medio de este otros usuarios descarguen el
archivo que han subido.

10º Runescape: es un videojuego de rol multijugador masivo en línea. Cuenta con más de Quince
millones de cuentas activas y diariamente jugando supera los 600.000 jugadores. En Unix con
compilación en C++ para los últimos Sistemas Operativos.
Descripción del proyecto.

El alfabeto del autómata podría ser cualquiera siempre que contenga los símbolos a y b que son los
que emplea el AFD. Podemos suponer

Σ = {a, b}

El lenguaje de nuestro ejercicio es:

L = {a *, b3}

El AFD representado tiene cinco estados:

q0, q1, q2, q3, q4

El estado inicial es q0 y el final es q3.

S= {q0, q1, q2, q3, q4}, FDC= {q3}

Ejemplos de palabras:

No Validas

 ac: no la acepta ya que el símbolo c no forma parte del alfabeto Σ. Si forzamos su


funcionamiento, el autómata muere (se bloquea) en el estado q0. No alcanza un estado de
aceptación.

 aab: no la acepta. El autómata se mantiene en el estado q0 al recibir ‘a’ De q0 pasa a q0 (se


mantiene) al recibir la primera b pasa de q0 a q1 pero el autómata muere como q1 no es el
estado final, el autómata no finaliza.

 a: no la acepta. El autómata se mantiene en el estado q0 al recibir a y muere en este estado


ya que no es de aceptación y no hay más transiciones (porque no hay más símbolos de
entrada).

Validas

 bbb: la acepta. No importa si no recibe a, porque a esta elevado a una estrella de Kleene por
lo tanto este carácter puede ser nulo.

 abaabaaabaaa: la acepta. El autómata se mantiene en el estado q0 al recibir ‘a’, al recibir la


primera b pasa de q0 a q1, el autómata se mantiene en el mismo estado mientras reciba a
hasta que recibe una b pasando de q1 a q2, el autómata aún se mantiene en q2 recibiendo a,
al recibir la tercera b el autómata pasa de q2 a q3, es estado es el final de cadena por lo tanto
puede terminar o seguir recibiendo tantas a como vengan.
Desarrollo
Las funciones de transición son:

f (q0, a) = q0
f (q0, b) = q1
f (q1, a) = q1
f (q1, b) = q2
f (q2, a) = q2
f (q2, b) = q3 FDC
f (q3, a) = q3 FDC
f (q3 , b) = q4
f (q4 , a) = q4
f (q4, b) = q4
Iniciamos el AFD:

El AFD se encuentra en q0. En este estado hay dos posibilidades:

1. Si el símbolo que recibe es a, el autómata se mantiene en el mismo estado q0, aceptando la


palabra w = a de Σ, el autómata puede mantenerse en el mismo estado si sigue recibiendo a

2. Si el siguiente símbolo que recibe es b, pasa al estado q1. El autómata no para pero sí que
acepta la palabra formada por la concatenación de todos los símbolos que ha recibido.

Ahora el AFD se encuentra en q1. Se repite el mismo caso del estado anterior

Una vez que el AFD se encuentre en q2. Se repite el mismo caso del estado anterior salvo que si el
siguiente símbolo que recibe es b, pasa al estado q3. El autómata para y acepta la palabra formada
por la concatenación de todos los símbolos que ha recibido hasta ahora.

Pero Si el símbolo que recibe es a, el autómata se mantiene en el mismo estado q2, el autómata
puede mantenerse en el mismo estado si sigue recibiendo a, hasta recibir una b la cual es necesaria
para que el lenguaje sea aceptado correctamente

Por ultimo AFD se encuentra en q3. Si el símbolo que recibe es a, el autómata se mantiene en el
mismo estado q3, El autómata puede parar y aceptar las palabras formadas por la concatenación de
todos los símbolos que ha recibido y terminar.

Pero para que este Autómata Finito sea Determinístico de cada una de sus estados debe salir un arco
saliente con todos los símbolos del alfabeto.

Así que en el estado q3, puede recibir un símbolo b que le lleve a un estado q4 de no aceptación.

El estado q4 también debe tener sus arco salientes a, b respectivos, leyéndolos y manteniéndose en
el mismo estado de no aceptación.
Diagrama de transición:

El diagrama de transición nos nuestra garifamente nuestras transiciones y nos permite observar el
funcionamiento del autómata
/******Código: ******/
import java.util.Scanner;
public class AFD {
int cont;
boolean aceptado;
char [] car;
public void inicio() {
cont = 0;
aceptado=false;
q0(); }
public void q0() {
if(cont<car.length) {
if(car[cont]=='a') {
cont++;
q0(); }
else if(car[cont]=='b') {
cont ++;
q1(); }
} }
public void q1() {
if(cont<car.length) {
if(car[cont]=='a') {
cont++;
q1(); }
else if(car[cont]=='b') {
cont ++;
q2(); }
} }
public void q2() {
if(cont<car.length) {
if(car[cont]=='a') {
cont++;
q2(); }
else if(car[cont]=='b') {
cont ++;
q3(); }
} }
public void q3() {
aceptado= true;
if(cont<car.length) {
if(car[cont]=='a') {
cont++;
q3();}
else if(car[cont]=='b') {
cont ++;
qerror(); }
} }
public void qerror() {
aceptado= false; }
/******Principal******/
public static void main(String[]args) {
System.out.println("L = {a*, b^3}");
System.out.println("Ingrese una cadena");
Scanner sc= new Scanner(System.in);
AFD aut = new AFD();
String cadena = sc.next();
aut.car =cadena.toCharArray();
aut.inicio();
if(aut.aceptado)
System.out.println("Cadena aceptada");
else
System.out.println("Cadena no aceptada");
}
}
Conclusiones

Se nos fue más fácil usar java como lenguaje de programación porque es un lenguaje orientado a
objetos.

El autómata finito mostrado es determinístico porque de cada uno de sus estados sale un arco silente
con cada símbolo del alfabeto leído. Y cumple con las condiciones del leguaje {a *, b3}.

Bibliografía y páginas Web utilizadas.

https://www.matesfacil.com/automatas-lenguajes/

https://www.ecured.cu/

https://codigofacilito.com/

Potrebbero piacerti anche