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

📅  最后修改于: 2021-09-27 22:43:35             🧑  作者: Mango

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

问题1:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W | = 2即,字符串的长度正好是2。

说明 –所需的语言如下:

L = {aa, ab, ba, bb} 

语言的状态转换图如下:

这里,
状态A代表长度设定为零(0)的所有字符串的,状态B表示设置长度一(1)的所有的字符串的,状态C表示设置长度的两个(2)的所有的字符串的。状态 C 是最终状态,D 是死状态,这是因为在获得任何字母表作为输入后,它永远不会进入最终状态。

Number of states: n+2
Where n is |w|=n 

上述自动机将接受所有的字符串具有该字符串的长度恰好2.当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到 C 并且当字符串的长度大于 2 时,它将从状态 C 转到 D(死状态),然后从状态 D 转到 D 本身。

#check string in
#in state A
def checkStateA(n):
      
    #if length of
    #string is one
    #print not accepted
    if(len(n)==1):
        print("string not accepted")
    else:   
        #pass string to stateB to
        #to check further transitions
        if(n[0]=='a' or n[0]=='b'):
            stateB(n[1:])
              
              
def stateB(n):
    #here if length 
    #is not 1 print#string not accepted
    if(len(n)!=1):
        print("string not accepted")
    else:
        #else pass string 
        #to state c
        stateC(n[1:])
def stateC(n):
    #here if length 
    #becomes zero
    #print accepted
    #else not accepted
    if (len(n)==0):
        print("string accepted")
    else:
        print("string not accepted")
      
      
#take input    
n=input()
checkStateA(n)

问题2:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W |> = 2即,字符串的长度至少应为2。

说明 –所需的语言如下:

L = {aa, ab, ba, bb, aaa, aab, aba, abb........} 

语言的状态转换图如下:

这里,
状态 A 表示长度为零 (0) 的所有字符串的集合,状态 B 表示长度为一 (1) 的所有字符串的集合,状态 C 表示长度为 2 (2) 的所有字符串的集合。

Number of states: n+1
Where n is |w|>=n 

上述自动机接受具有字符串,对至少2的长度的所有字符串当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到 C,最后当字符串的长度大于 2 时,它将从状态 C 转到 C 本身。

#check string in
#in state A
def checkStateA(n):
      
    #if length of
    #string is one
    #print not accepted
    if(len(n)==1):
        print("string not accepted")
    else:   
        #pass string to stateB to
        #to check further transitions
        if(n[0]=='a' or n[0]=='b'):
            stateB(n[1:])
              
              
def stateB(n):
      
    #here if length 
    #is less than 1 
    #printstring not accepted
    if(len(n)<1):
        print("string not accepted")
    else:
          
        #else pass string 
        #to state c
        stateC(n[1:])
          
          
def stateC(n):
    #here if length of string 
    #is greater than equal to zero
    #print accepted
    #else not accepted
    if (len(n)>=0):
        print("string accepted")
    else:
        print("string not accepted")
      
      
#take input    
n=input()
checkStateA(n)

问题3:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W | <= 2即,字符串的长度是atmost 2。

说明 –所需的语言如下:

L = {?, aa, ab, ba, bb} 

语言的状态转换图如下:

这里,
状态 A 表示长度为零 (0) 的所有字符串的集合,状态 B 表示长度为一 (1) 的所有字符串的集合,状态 C 表示长度为 2 (2) 的所有字符串的集合,状态 A、B、C 是最终状态和 D 是死状态,因为在获得任何字母作为输入后,它永远不会进入最终状态。

Number of states: n+2
Where n is |w|<=n 

上述自动机将接受所有的字符串具有至多2的字符串的长度。当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到 C,最后当字符串的长度大于 2 时,它将从状态 C 转到 D(死状态)。

#check string in
#in state A
def checkStateA(n):
      
    #if only two transition occurs 
    #then print string accepted
    
    if(n[0]=='a' or n[0]=='b'):
        stateB(n[1:])
              
              
def stateB(n):
      
    #if length is 0 
    #print accepted
    if(len(n)==0):
        print("string accepted")
    else:
        stateC(n[1:])
          
          
def stateC(n):
    #if length is 0 
    #print accepted
    #else not accepted
    if (len(n)==0):
        print("string sccepted")
    else:
        print("string not accepted")
      
      
#take input    
n=input()
checkStateA(n)