Computer science 寻找非确定性有限自动机语言

Computer science 寻找非确定性有限自动机语言,computer-science,computation,Computer Science,Computation,我是一名二年级和二年级的计算机科学学生,我们得到了一个不确定的有限自动机,问它能接受什么单词 我试图将其简化为确定性有限自动机,结果是: 我认为is不接受任何b*或a或a(b+ab*a)*格式的单词,无法找出它们之间的共同点以及它接受的单词,我想了这么多,它与整个单词无关,仅限于开头,因为如果单词以aa开头,它可以有a和b的任意组合,这无关紧要,它将被接受 非常感谢您的帮助。首先,我将以自己的方式回答问题。然后,我将讨论您到确定性有限自动机的转换 我们可以写一组方程,解q2,看看正则表达式导

我是一名二年级和二年级的计算机科学学生,我们得到了一个不确定的有限自动机,问它能接受什么单词

我试图将其简化为确定性有限自动机,结果是:

我认为is不接受任何b*或a或a(b+ab*a)*格式的单词,无法找出它们之间的共同点以及它接受的单词,我想了这么多,它与整个单词无关,仅限于开头,因为如果单词以aa开头,它可以有a和b的任意组合,这无关紧要,它将被接受


非常感谢您的帮助。

首先,我将以自己的方式回答问题。然后,我将讨论您到确定性有限自动机的转换

我们可以写一组方程,解q2,看看正则表达式导致了这种状态。考虑以下系统:

(q1) = (q2)a + e
(q2) = (q1) + (q3)(a + b)
(q3) = (q1)a + (q3)b
我们想解决导致接受状态的原因,所以让我们先消除不接受状态:

(q1) = (q2)a + e
(q2) = (q2)a + e + (q3)(a + b)
(q3) = (q2)aa + a + (q3)b
为了消除(q3),我们可以使用规则(x)=r+(x)s(x)=rs*,然后替换为:

(q1) = (q2)a + e
(q3) = ((q2)aa + e)b*
(q2) = (q2)a + e + ((q2)aa + a)b*(a + b)
     = (q2)a + e + (q2)aab*(a + b) + ab*(a + b)
     = (q2)[a + aab*(a + b)] + [e + ab*(a + b)]
     = (e + ab*(a + b))(a + aab*(a + b))*
     = (e + ab*(a + b))(a(e + ab*(a + b)))*
我们恢复的正则表达式基本上描述了这一点:

通过空转换或通过第三季度到达第二季度;然后,回到第二季度,转到第一季度并重复第一部分。你可以想做多少次就做多少次

如何编写系统

  • 初始状态可通过e达到
  • 如果在表达式r上存在从状态q到状态q'的转换,那么q'=(q)r
  • 如果可以通过多种方式达到某个状态,请使用+并包括所有方式
  • < >确定一个有限自动机,考虑每个状态子集,并添加过渡。我们从只包含初始状态的子集{q1}开始

      /------------------------------------\
      |                               __   |
      V                              /  \  |
    {q1} -a-> {q1,q3} -a-> {q1,q2,q3}   a  |
     |           |             |     ^__/  |
     b           b             b           |
     |     __    |             |           |
     V    /  V   V             |           |
    { }   b   {q2,q3} <--------/           |
     ^    \__/      \                      |
     |               \-a->{q1,q2}-----a----/
     |                     |               
     \----------b----------/
    
    /------------------------------------\
    |                               __   |
    V/\|
    {q1}-a->{q1,q3}-a->{q1,q2,q3}a|
    |           |             |     ^__/  |
    b b b|
    |     __    |             |           |
    V/V V||
    {}b{q2,q3}{q1,q2}--a----/
    |                     |               
    \----------b----------/
    
    添加状态和转换的规则包括:

  • 始终添加初始状态{qi}
  • 对于输入字母表中的每个状态{q1,q2,…,qn}和每个符号x,添加从{q1,q2,…,qn}到x上的{q1',q2',,…,qn'}的转换,其中q1',q2',,…,qn'可以从q1,q2,…,qn'通过消耗正好一个x(可能还有几个e-转换)到达
  • 如果状态{q1',q2',,…,qn'}不在自动机中,请添加它,并在该状态上重复此过程
  • 重复上述步骤,直到添加了所有必要的状态,并且输入字母表中每个符号的所有状态都有转换
  • 注意:在上面的自动机中,我没有显示死状态{}上的转换。所有源自死状态的转换都以死状态终止

    我的{q1}类似于你最上面的(OK)。我的{}类似于你的洞。我的{q1,q3}类似于你的NOT。我的{q2,q3}类似于你最右边的OK

    然而,我的{q1,q2,q3}与你最底层的OK并不相似。为了让你的像我的一样,在符号b上添加一个从最底部的OK到最右边的OK的过渡

    注意,my{q1,q2}是冗余的,与my{q1}等价;从{q1,q2}出来的所有跃迁都与从{q1}出来的跃迁相同。真的,因为从q1到q2的电子转换,我应该把{q1,q2}作为初始状态,但不管怎样,你明白了


    你的DFA不正确的原因是,在NFA中,总是有机会“搞砸”并最终陷入困境。在自动机中,您可以到达最底部的“确定”,然后进行设置。

    请勿在此处发布图像链接。改为添加图片。谢谢,现在我明白我的错误了,非常感谢。