先决条件:设计有限自动机
在本文中,我们将看到确定性有限自动机(DFA)的设计。
问题:在 {a, b} 上构造一个接受字符串集的最小 DFA,其中 Number of a(w) mod 2 = 0 或 Number of b(w) mod 2 = 0 即,’a’ 的数目应该是可整除的by 2 或 ‘b’ 的数量应该可以被 2 整除,或者两者都可以被 2 整除,其中 ‘w’ 是 {a, b} 上的任何字符串。
说明:所需的语言将类似于:
L1 = {ε, aa, aabb, aab, bb, bba, ...........}
在这里,我们可以看到上述语言的每个字符串都满足给定问题的条件,即,这里 ε 被接受,因为 ‘a’ 和 ‘b’ 的数量都为零,而其余的字符串具有 ‘a’可被 2 整除或 ‘b’ 可被 2 整除,或两者均可被 2 整除。
但是此 DFA 不接受以下语言,因为它的字符串不满足给定问题的条件。
L2 = {ba, bbba, baaa, ..............}
在这里我们可以看到,上述语言的字符串都不满足给定问题的条件,即“a”或“b”或以上任何字符串都不能被 2 整除。
所需语言的状态转换图如下所示:
在上面的 DFA 中,在每个州都有一个州名作为“A”,在它的正下方有 (ee) 表示“a”的数量是偶数 (e) 和“b”的数量是偶数 (e ) 也。对于状态名称为“B”,其正下方有(eo)表示“a”的数量是偶数(e),“b”的数量是奇数(o)等等。
- 初始和最终状态 ‘A’ 在将 ‘a’ 作为输入时,它转换到最终状态 ‘D’,在获取 ‘b’ 作为输入时,它转换到另一个最终状态 ‘B’。
- 将“a”作为输入时的最终状态“B”转换为状态“C”,并在输入返回到初始状态“A”时获得“b”。
- 另一个最终状态 ‘D’ 在将 ‘b’ 作为输入时它转换到状态 ‘C’ 并在获得 ‘a’ 作为输入时返回到初始状态 ‘A’。
- 状态 ‘C’ 在将 ‘b’ 作为输入时转换到最终状态 ‘D’ 并在获得 ‘a’ 作为输入时返回到状态 ‘B’。
Python实现:
def stateA(n):
#if length of n become 0
#then print accepted
if(len(n)==0):
print("string accepted")
else:
#if at zero index
#'a' found call
#stateD function
if (n[0]=='a'):
stateD(n[1:])
#if at zero index
#'b' found call
#stateB function
elif (n[0]=='b'):
stateB(n[1:])
def stateB(n):
#if length of n become 0
#then print accepted
if(len(n)==0):
print("string accepted")
else:
#if at zero index
#'a' found call
#stateC function
if (n[0]=='a'):
stateC(n[1:])
#if at zero index
#'b' found call
#stateA function
elif (n[0]=='b'):
stateA(n[1:])
def stateC(n):
#if length of n become 0
#then print not accepted
if(len(n)==0):
print("string not accepted")
else:
#if at zero index
#'a' found call
#stateB function
if (n[0]=='a'):
stateB(n[1:])
#if at zero index
#'b' found call
#stateD function
elif (n[0]=='b'):
stateD(n[1:])
def stateD(n):
#if length of n become 0
#then print accepted
if(len(n)==0):
print("string accepted")
else:
#if at zero index
#'a' found call
#stateA function
if (n[0]=='a'):
stateA(n[1:])
#if at zero index
#'b' found call
#stateC function
elif (n[0]=='b'):
stateC(n[1:])
#take input
n=input()
#call stateA function
#to check the input
stateA(n)