先决条件:设计有限自动机,设计确定性有限自动机(第 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)