📜  设计确定性有限自动机(第 4 组)

📅  最后修改于: 2021-09-27 06:25:10             🧑  作者: Mango

先决条件:设计有限自动机,设计确定性有限自动机(第 3 组)
在本文中,我们将看到一些确定性有限自动机 (DFA) 的设计。

问题 1:构造一个最小 DFA 接受 {a, b} 上的字符串集,其中每个 ‘a’ 后跟一个 ‘b’。
说明:所需的语言将类似于:

L1 = {ε, ab, abab, abbbb, ababababab, ..............}

在这里我们可以看到,包含 ‘a’ 的语言的每个字符串后面都跟有 ‘b’,但此 DFA 不接受以下语言,因为以下语言的某些字符串不包含 ‘a’ 后跟 ‘乙’。

L2 = {ba, baab, bbaba, ..............}

包含 ‘a’ 后跟 ‘b’ 的语言的状态转换图将如下所示:

在上面的 DFA 中,状态 ‘W’ 也是初始状态和最终状态,在将 ‘b’ 作为输入时,它保持自身的状态,在获得 ‘a’ 作为输入时,它转变为正常状态 ‘X’在获得“b”作为输入时,它会转换为最终状态“W”。将 ‘a’ 作为输入时的状态 ‘X’ 转变为死状态 ‘Z’。状态“Z”被称为死状态,因为在获得任何输入时,它永远无法过渡到最终状态。

def stateW(n):
    if(len(n)==0):
        print("Accepted")
    else:  
          
        #if 'a' found 
        #call function stateX
        if (n[0]=='a' ):
            stateX(n[1:])
        #if 'b' found 
        #call function stateW    
        elif (n[0]=='b' ):
            stateW(n[1:])    
          
def stateX(n):
    if(len(n)==0):
        print("Not Accepted")
    else:  
          
        #if 'a' found 
        #call function stateZ
        if (n[0]=='a' ):
            stateZ(n[1:])
          
        #if 'b' found 
        #call function stateW     
        elif (n[0]=='b' ):
            stateW(n[1:]) 
              
def stateZ(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #if a or b found 
         #call stateZ
        if (n[0]=='a' or n[0]=='b'):
            stateZ(n[1:])              
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)

问题 2:构造一个接受 {a, b} 上的字符串集的最小 DFA,其中每个 ‘a’ 后面永远不会跟有 ‘b’
说明:所需的语言将类似于:

L1 = {ε, a, aa, aaaa, b, bba, bbbbba..............}

在这里我们可以看到,包含 ‘a’ 的语言的每个字符串后面永远不会跟有 ‘b’,但此 DFA 不接受以下语言,因为包含 ‘a’ 的以下语言的某些字符串后面是 ‘乙’。

L2 = {ba, baab, bbaba, ..............}

包含“a”的语言的状态转换图永远不会跟随“b”,如下所示:

在上面的 DFA 中,状态 ‘X’ 是初始和最终状态,在将 ‘b’ 作为输入时,它保持自身的状态,在将 ‘a’ 作为输入时,它转换到最终状态 ‘Y’,在将 ‘a’ 作为输入,它保持自身的状态,并在将 ‘b’ 作为输入转换到死状态 ‘Z’ 时。状态“Z”被称为死状态,这是因为它永远不能进入任何最终状态。

def stateX(n):
    if(len(n)==0):
        print("Accepted")
    else:  
          
        #if 'a' found 
        #call function stateY
        if (n[0]=='a' ):
            stateY(n[1:])
        #if 'b' found 
        #call function stateX   
        elif (n[0]=='b' ):
            stateX(n[1:])    
          
def stateY(n):
    if(len(n)==0):
        print("Accepted")
    else:  
          
        #if 'a' found 
        #call function stateZ
        if (n[0]=='a' ):
            stateZ(n[1:])
          
        #if 'b' found 
        #call function stateY   
        elif (n[0]=='b' ):
            stateY(n[1:]) 
              
def stateZ(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #if a or b found 
         #call stateZ
        if (n[0]=='a' or n[0]=='b'):
            stateZ(n[1:])              
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)