先决条件:有限自动机简介
在本文中,我们将看到非确定性有限自动机 (NFA) 的一些设计。
问题1:最小NFA的构建接受一组字符串超过{A,B},其中该语言的每个字符串包含“A”作为子字符串。
说明:所需的语言将类似于:
L1 = {ab, abba, abaa, ...........}
在这里我们可以看到,上述语言的每个字符串都包含 ‘a’ 作为子字符串。但是下面的语言不被这个 NFA 接受,因为下面的语言的一些字符串不包含 ‘a’ 作为子字符串。
L2 = {bb, b, bbbb, .............}
所需语言的状态转换图如下所示:
在上面的 NFA 中,初始状态 ‘X’ 在获得 ‘a’ 作为输入时它转换到最终状态 ‘Y’ 并且在获得 ‘b’ 作为输入时它保持在自身的状态。将 ‘a’ 或 ‘b’ 作为输入的最终状态 ‘Y’ 保持其自身状态。请参阅上述 NFA 的 DFA。
转换表:
在该表中,初始状态用 —> 表示,最终状态用 * 表示。
STATES | INPUT (a) | INPUT (b) |
—> X | Y* | X |
Y* | Y* | Y* |
Python实现:
def stateX(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 then call
#stateY function
if (n[0]=='a'):
stateY(n[1:])
#if at zero index
#'b' then call
#stateX function
elif (n[0]=='b'):
stateX(n[1:])
def stateY(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
#stateY function
if (n[0]=='a'):
stateY(n[1:])
#if at zero index
#'b' found call
#stateY function
elif (n[0]=='b'):
stateY(n[1:])
#take input
n=input()
#call stateA function
#to check the input
stateX(n)
问题 2:构造一个最小 NFA,它接受 {a, b} 上的一组字符串,其中语言的每个字符串不包含 ‘a’ 作为子字符串。
说明:所需的语言将类似于:
L1 = {b, bb, bbbb, ...........}
在这里我们可以看到,上述语言的每个字符串都不包含“a”作为子字符串,但此 NFA 不接受以下语言,因为以下语言的某些字符串包含“a”作为子字符串。
L2 = {ab, aba, ababaab..............}
所需语言的状态转换图如下所示:
在上面的 NFA 中,初始和最终状态 ‘Y’ 在获得 ‘b’ 作为输入时保持在它自己的状态。
转换表:
在该表中,初始状态用 —> 表示,最终状态用 * 表示。
STATES | INPUT (a) | INPUT (b) |
—> Y * | Y* | Y* |
Python实现:
def stateY(n):
#if length of n become 0
#then print accepted
if(len(n)==0):
print("string accepted")
else:
#if at zero index
#'a' found then
#print not accepted
if (n[0]=='a'):
print("String not accepted")
#if at zero index
#'b' found call
#stateY function
elif (n[0]=='b'):
stateY(n[1:])
#take input
n=input()
#call stateY function
#to check the input
stateY(n)