先决条件 – 设计有限自动机,上一篇:设计确定性有限自动机(第 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 整除的字符串。