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

📅  最后修改于: 2021-09-28 09:59:48             🧑  作者: Mango

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

问题1:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W |可以被 2 整除,即 |w|模 2 = 0。

说明 –所需的语言如下:

L = {?, aa, ab, ba, bb, aaaa, bbbb, ............} 

语言的状态转换图如下:


这里,状态A代表设定长度的所有字符串偶数(0,2,4,…),和状态B代表设定长度的所有字符串的奇数的(1,3,5,……)。

Number of states: n
If |W| mod n = 0 
def stateA(n):
    if(len(n)==0):
        print("Accepted")
    else:  
          
        #on any input call function stateB
        if (n[0]=='0' or n[0]=='1'):
            stateB(n[1:])
          
def stateB(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #on any input call function stateA
        if (n[0]=='0' or n[0]=='1'):
            stateA(n[1:])        
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)

上述自动机接受具有字符串整除的长度的所有字符串通过2.当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到状态 A 等等。状态 A 是最终状态,即它接受所有长度可被 2 整除的字符串。

问题2:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W |不能被 2 整除,即 |w|模数 2 = 1。

说明 –所需的语言如下:

L = {a, b, aaa, aab, aba, abb, aaaaa, bbbb, .......} 

语言的状态转换图如下:


这里,状态A代表设定长度的所有字符串偶数(0,2,4,…),和状态B代表设定长度的所有字符串的奇数的(1,3,5,……)。

def stateA(n):
    if(len(n)==0):
        print("Not Accepted")
    else:  
          
        #on any input call function stateB
        if (n[0]=='0' or n[0]=='1'):
            stateB(n[1:])
          
def stateB(n):
    if(len(n)==0):
        print("Accepted")
    else:
          
         #on any input call function stateA
        if (n[0]=='0' or n[0]=='1'):
            stateA(n[1:])        
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)

上述自动机接受具有字符串不能整除的长度的所有字符串通过2.当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到状态 A 等等。状态 B 是最终状态,即它接受所有长度不能被 2 整除的字符串。

问题3:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W |可以被 3 整除,即 |w|模 3 = 0。

说明 –所需的语言如下:

L = {?, aaa, aab, aba, abb, aaaaaa, bbbbbb, .......} 

语言的状态转换图如下:


这里,状态 A 表示字符串长度除以 3 余数为零(0)的集合,状态 B 表示字符串长度除以 3 余数为一的集合(1),状态 C 表示字符串长度的集合除以 3 则余数为二 (2)。

Number of states: n
If |W| mod n = 0 
def stateA(n):
    if(len(n)==0):
        print("Accepted")
    else:  
          
        #on any input call function stateB
        if (n[0]=='0' or n[0]=='1'):
            stateB(n[1:])
          
def stateB(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #on any input call function stateC
        if (n[0]=='0' or n[0]=='1'):
            stateC(n[1:])  
              
def stateC(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #on any input call function stateA
        if (n[0]=='0' or n[0]=='1'):
            stateA(n[1:])              
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)

上述自动机接受具有字符串整除的长度的所有字符串由3.当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到 C 并且当字符串的长度为 3 时,它将从状态 C 转到 A(最终状态)。状态 A 是最终状态,即它接受所有长度可被 3 整除的字符串。

问题4:一个DFA的构建在该组字符串的{A,B},使得字符串的长度| W |不能被 3 整除,即 |w|模数 3 = 1。

说明 –所需的语言如下:

L = {a, b, aa, ab, ba, bb, aaaa, bbbb, ........} 

语言的状态转换图如下:


这里,状态 A 表示字符串长度除以 3 余数为零(0)的集合,状态 B 表示字符串长度除以 3 余数为一的集合(1),状态 C 表示字符串长度的集合除以 3 则余数为二 (2)。

def stateA(n):
    if(len(n)==0):
        print("Not Accepted")
    else:  
          
        #on any input call function stateB
        if (n[0]=='0' or n[0]=='1'):
            stateB(n[1:])
          
def stateB(n):
    if(len(n)==0):
        print("Accepted")
    else:
          
         #on any input call function stateC
        if (n[0]=='0' or n[0]=='1'):
            stateC(n[1:])  
              
def stateC(n):
    if(len(n)==0):
        print("Not Accepted")
    else:
          
         #on any input call function stateA
        if (n[0]=='0' or n[0]=='1'):
            stateA(n[1:])              
  
  
  
#take input
n=input()
  
#call stateA
#to check the input
stateA(n)

上述自动机接受具有字符串不能整除的长度的所有字符串由3.当字符串的长度是1,则它会从状态A到B.当字符串的长度为2,则它会从状态 B 到 C 并且当字符串的长度为 3 时,它将从状态 C 到 A。状态 B 和 C 是最终状态,即它接受所有长度不能被 3 整除的字符串。