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

📅  最后修改于: 2021-09-28 11:07:29             🧑  作者: Mango

先决条件:有限自动机简介
在本文中,我们将看到非确定性有限自动机 (NFA) 的一些设计。

问题1:最小NFA的构建接受一组字符串超过{A,B},其中具有“AB”的语言开始的每个字符串。
说明:所需的语言将类似于:

L1 = {ab, abba, abaa, ...........}

在这里我们可以看到,上述语言的每个字符串都以“ab”开头,并以任何字母“a”或“b”结尾。
但是下面的语言不被这个 NFA 接受,因为下面的语言字符串都不是以“ab”开头的。

L2 = {ba, ba, babaaa..............}

所需语言的状态转换图如下所示:

在上面的 NFA 中,初始状态 ‘X’ 在将 ‘a’ 作为输入时会转换为状态 ‘Y’。将 ‘b’ 作为输入时的状态 ‘Y’ 转换为最终状态 ‘Z’。将 ‘a’ 或 ‘b’ 作为输入的最终状态 ‘Z’ 保持其自身状态。

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 call
        #stateY function    
        if (n[0]=='a'):
            stateY(n[1:])
          
        #if at zero index 
        #'b' then print 
        #not accepted
        elif (n[0]=='b'):
            print("string not accepted")   
         
def stateY(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' then print 
        #not accepted   
        if (n[0]=='a'):
            print("string not accepted") 
              
        #if at zero index 
        #'b' found call
        #stateZ function    
        elif (n[0]=='b'):
            stateZ(n[1:]) 
              
def stateZ(n):
    #if length of n become 0 
    #then print accepted
    if(len(n)==0):
        print("string accepted")
          
    else:  
        #if at zero index 
        #'b' found call
        #stateZ function    
        if (n[0]=='a'):
            stateZ(n[1:]) 
              
        #if at zero index 
        #'b' found call
        #stateZ function    
        elif (n[0]=='b'):
            stateZ(n[1:])             
          
  
              
              
#take input
n=input()
  
#call stateA function
#to check the input
stateX(n) 

问题2:最小NFA的构建接受一组字符串超过{A,B},其中该语言的每个字符串不以“AB”。
说明:所需的语言将类似于:

L1 = {ba, bba, bbaa, ...........}

在这里我们可以看到,上述语言的每个字符串都不是以 ‘ab’ 开头,而是可以以 ‘a’ 或 ‘b’ 结尾。
但是下面的语言不被这个NFA接受,因为下面的语言的一些字符串以’ab’开头。

L2 = {ab, aba, ababaab..............}

所需语言的状态转换图如下所示:

在上面的 NFA 中,初始状态 ‘X’ 在将 ‘b’ 作为输入时转换为状态 ‘Y’。状态 ‘Y’ 在获得 ‘a’ 或 ‘b’ 作为输入时它转换到最终状态 ‘Z’。将 ‘a’ 或 ‘b’ 作为输入的最终状态 ‘Z’ 保持其自身状态。

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 
        #print not accepted    
        if (n[0]=='a'):
            print("string not accepted")   
          
        #if at zero index 
        #'b' then call
        #stateY function
        elif (n[0]=='b'):
            stateY(n[1:])
         
def stateY(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
        #stateZ function   
        if (n[0]=='a'):
            stateZ(n[1:]) 
              
        #if at zero index
        #'b' found call
        #stateZ function
        elif (n[0]=='b'):
            stateZ(n[1:]) 
              
def stateZ(n):
    #if length of n become 0 
    #then print accepted
    if(len(n)==0):
        print("string accepted")
          
    else:  
        #if at zero index 
        #'b' found call
        #stateZ function    
        if (n[0]=='a'):
            stateZ(n[1:]) 
              
        #if at zero index 
        #'b' found call
        #stateZ function    
        elif (n[0]=='b'):
            stateZ(n[1:])             
          
  
              
              
#take input
n=input()
  
#call stateA function
#to check the input
stateX(n)