Diseño de autómatas finitos deterministas (Conjunto 10)

Requisito previo: diseño de autómatas finitos 
En este artículo, veremos algunos diseños de autómatas finitos deterministas (DFA).
Problema-1: Construcción de un DFA mínimo que acepta un conjunto de strings sobre {a} en el que {a n | n≥0, n≠2 es decir, ‘n’ debe ser mayor que 0 y no igual a 2}. 
Explicación: El idioma deseado será como: 
 

L1 = {ε, a, aaa, aaaa, aaaaa, ..................}

Aquí ε se toma como una string porque el valor de ‘n’ es mayor o igual a cero y el resto de las strings tienen ‘a’ elevado a cualquier número natural positivo, pero no 2. 
Este DFA no acepta el siguiente lenguaje porque parte de la string que contiene ‘a’ elevada a 2. 
 

L2 = {aa, aaaaa, ..........}

Este idioma L2 no es aceptado por este DFA requerido debido a que su string contiene ‘a’ elevado a 2. 
El diagrama de transición de estado del idioma deseado será el siguiente: 
 

En el DFA anterior, el estado inicial y final ‘W’ al obtener ‘a’ como entrada, transita a un estado final ‘X’. El estado final ‘X’ al obtener ‘a’ como entrada, transita a un estado ‘Y’. El estado ‘Y’ al obtener ‘a’ como entrada, transita a un estado final ‘Z’ que al obtener cualquier número de ‘a’ permanece en el estado de sí mismo. 
 

Implementación de Python:

Python3

             
def stateW(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateX function   
        if (n[0]=='a'):
            stateX(n[1:])
        
             
         
def stateX(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else: 
        #if at zero index
        #'a' found call
        #stateY function   
        if (n[0]=='a'):
            stateY(n[1:])
         
def stateY(n):
    #if length of n become 0
    #then print not accepted
    if(len(n)==0):
        print("string not accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateZ function   
        if (n[0]=='a'):
            stateZ(n[1:])
         
def stateZ(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateZ function   
        if (n[0]=='a'):
            stateZ(n[1:])
             
#take input
n=input()
 
#call stateW function
#to check the input
stateW(n)

Problema-2: Construcción de un DFA mínimo que acepta un conjunto de strings sobre {a} en el que {a n | n≥0, n≠2, n≠4 es decir, ‘n’ debe ser mayor que 0 y no igual a 2 y 4}. 
Explicación: El idioma deseado será como: 
 

L1 = {ε, a, aa, aaaaa, aaaaaa, .................. }

Aquí ε se toma como una string porque el valor de ‘n’ es mayor o igual a cero y el resto de las strings tienen ‘a’ a la potencia de cualquier número natural positivo, pero no 2 y 4. 
Esto no acepta el lenguaje a continuación . DFA porque parte de la string contiene ‘a’ elevado a 2 y 4. 
 

L2 = {aa, aaaaa, aaaaaaaaaa, ............. }

El diagrama de transición de estado del idioma deseado será el siguiente: 
 

En el DFA anterior, el estado inicial y final ‘A’ al obtener ‘a’ como entrada, transita a un estado final ‘B’. El estado final ‘B’ al obtener ‘a’ como entrada, transita a un estado ‘C’. El estado ‘C’ al obtener ‘a’ como entrada, transita a un estado final ‘D’. El estado final ‘D’ al obtener ‘a’ como entrada, transita a un estado ‘E’. El estado ‘E’ al obtener ‘a’ como entrada, transita a un estado final ‘F’. El estado final ‘F’ al obtener ‘a’ como entrada, permanece en el estado de sí mismo. 
 

Implementación de Python:

Python3

             
def stateA(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateB function   
        if (n[0]=='a'):
            stateB(n[1:])
        
             
         
def stateB(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else: 
        #if at zero index
        #'a' found call
        #stateC function   
        if (n[0]=='a'):
            stateC(n[1:])
         
def stateC(n):
    #if length of n become 0
    #then print not accepted
    if(len(n)==0):
        print("string not accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateD function   
        if (n[0]=='a'):
            stateD(n[1:])
         
def stateD(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateE function   
        if (n[0]=='a'):
            stateE(n[1:])
 
def stateE(n):
    #if length of n become 0
    #then print not accepted
    if(len(n)==0):
        print("string not accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateF function   
        if (n[0]=='a'):
            stateF(n[1:])
             
def stateF(n):
    #if length of n become 0
    #then print accepted
    if(len(n)==0):
        print("string accepted")
         
    else:
        #if at zero index
        #'a' found call
        #stateF function   
        if (n[0]=='a'):
            stateF(n[1:])           
             
#take input
n=input()
 
#call stateA function
#to check the input
stateA(n)

Publicación traducida automáticamente

Artículo escrito por Kanchan_Ray y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *