寻找不确定的有限自动机语言

时间:2019-03-18 10:13:13

标签: computer-science computation

我第二年和第二年是计算机科学专业的学生,​​我们得到了一个不确定的有限自动机,并询问它接受什么单词。

Here is the automaton

我尝试将其简化为确定性有限自动机,并得出以下结论:

My deterministic attempt

我断言是不接受b *或a或a(b + ab * a)*格式的任何单词,无法弄清楚它们之间的共同点和接受的单词,我对此非常了解,它与整个单词无关,仅与开头无关,因为如果单词以a开头,则可以具有a和b的任意组合,并且将被接受并不重要。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

我们可以编写一组方程式并求解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)))*

我们恢复的正则表达式基本上描述了这一点:

  

通过空过渡或经过q3来到达q2;然后,通过转到q1并重复第一部分来返回q2。您可以根据需要多次执行此操作。

您如何编写系统?

  1. e可以达到初始状态
  2. 如果表达式r上有从状态q到状态q'的过渡,则q'=(q)r
  3. 如果可以通过多种方式达到状态,请使用+并包括所有方式

要确定有限自动机,请考虑状态的每个子​​集,并随需添加过渡。我们从仅包含初始状态的子集{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----------/

添加状态和转换的规则是:

  1. 始终添加初始状态{qi}
  2. 对于每个状态{q1,q2,...,qn}和输入字母中的每个符号x,添加从{q1,q2,...,qn}到{q1',q2',的过渡。 ..,qn'}在x上,其中q1',q2',...,qn'可以从q1,q2,...,qn到达,因为它们只消耗了一个x(可能还有多个电子跃迁)
  3. 如果状态{q1',q2',...,qn'}尚未位于您的自动机中,请添加它,然后对该状态重复执行此过程
  4. 重复以上步骤,直到添加了所有必需的状态,并且输入字母中的每个符号的所有状态都有过渡。

注意:在上面的自动机中,我没有显示死态{}上的过渡。所有源自死态的转换都将以死态终止。

我的{q1}类似于您的最高处(OK)。我的{}与您的HOLE类似。我的{q1,q3}类似于您的NOT。我的{q2,q3}类似于您最右边的OK。

但是-我的{q1,q2,q3}与您最底层的OK并不相似。为了使自己像我的,在符号b上添加从最底下的OK到最右边的OK的过渡。

请注意,我的{q1,q2}是多余的,等效于我的{q1}; {q1,q2}之外的所有过渡与{q1}之外的所有过渡相同。确实,由于从q1到q2的电子转换,我应该将{q1,q2}设为初始状态,但是无论如何-您会明白的。

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