DFA de una string en la que el segundo símbolo de RHS es ‘a’

Requisito previo : problema de introducción a los autómatas finitos: dibujar autómatas finitos deterministas (DFA) del lenguaje que contiene el conjunto de todas las strings sobre {a, b} en el que el segundo símbolo de RHS es ‘a’.

Las strings en las que el penúltimo símbolo es «a» son:

aa, ab, aab, aaa, aabbaa, bbbab etc

Por ejemplo:

INPUT : baba
OUTPUT: NOT ACCEPTED

INPUT: aaab
OUTPUT: ACCEPTED

Construir directamente el DFA del problema dado es muy complicado. Entonces, aquí vamos a diseñar los autómatas finitos no deterministas (NFA) y luego convertirlos en autómatas finitos deterministas (DFA).

El NFA del idioma que contiene todas las strings en las que el segundo símbolo de la RHS es «a» es:

Aquí, A es el estado inicial y C es el estado final.
Ahora, vamos a construir la tabla de transición de estado de la NFA anterior.

Después de eso, dibujaremos la tabla de transición de estado de DFA utilizando la configuración de subconjuntos en la tabla de transición de estado de NFA. Mencionaremos todas las transiciones posibles para a y b.

Ahora es muy fácil dibujar el DFA con la ayuda de su tabla de transición. En este DFA, tenemos cuatro estados diferentes A, AB, ABC y AC, donde ABC y AC son los estados finales y A es el estado inicial del DFA.

Este es nuestro DFA requerido del idioma que contiene el conjunto de todas las strings sobre {a, b} en el que el segundo símbolo de RHS es ‘a’.

Tabla de transición:

ESTADOS ENTRADA (a) ENTRADA (b)
—> A (estado inicial) AB A
AB ABC* (estado final) AC* (estado final)
AC* (estado final) AB A
ABC* (estado final) ABC* (estado final) AC* (estado final)

Implementación de Python:

def stateA(n):
    #if length found 0 
    #print not accepted
    if (len(n)==0):
        print("string not accepted")
    else:    
          
        #if at index 0 
        #'a' found call 
        #function stateAB 
        if(n[0]=='a'):
            stateAB(n[1:])
              
        #else if 'b' found 
        #call function A.    
        elif (n[0]=='b'):
            stateA(n[1:])
          
def stateAB(n):
    #if length found 0 
    #print not accepted
    if (len(n)==0):
        print("string not accepted")
    else:
          
        #if at index 0 
        #'a' found call 
        #function stateABC
        if(n[0]=='a'):
            stateABC(n[1:])
              
        #else if 'b' found 
        #call function AC.     
        elif (n[0]=='b'):
            stateAC(n[1:]) 
          
def stateABC(n):
    #if length found 0 
    #print accepted
    if (len(n)==0):
        print("string accepted")
    else:
          
        #if at index 0 
        #'a' found call 
        #function stateABC
        if(n[0]=='a'):
            stateABC(n[1:])
              
        #else if 'b' found 
        #call function AC.     
        elif (n[0]=='b'):
            stateAC(n[1:])
          
def stateAC(n):
    #if length found 0 
    #print accepted
    if (len(n)==0):
        print("string accepted")
    else:
        #if at index 0 
        #'a' found call 
        #function stateAB
        if(n[0]=='a'):
            stateAB(n[1:])
              
        #else if 'b' found 
        #call function A.     
        elif (n[0]=='b'):
            stateA(n[1:])        
    
  
#take string input
n=input()
  
#call stateA
#to check the input
stateA(n)

Publicación traducida automáticamente

Artículo escrito por SUDIPTADANDAPAT 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 *