不理解正则表达式中有限自动机中的空字符串

时间:2014-09-19 05:10:52

标签: regex finite-automata

我正在阅读我的教科书(Michael Sipser的“计算理论导论”),并且有一部分试图将正则表达式(ab U b)*转换为非确定性有限自动机。这本书告诉我要打破这个表达,并为每件作品写一个NFA。当它达到ab时显示:

  1. a从第一个州到第二个
  2. 从第二个状态转到第三个
  3. 的空字符串
  4. A b从第三州进入最终接受州。
  5. 我真的很困惑,试图了解第二步。空字符串的用途是什么。如果它不在那里会不正确吗?

1 个答案:

答案 0 :(得分:2)

您可能正在参考示例1.56,对吗?首先,请记住他正在描述一个过程 - 将其视为一种算法,将始终在同一事件中执行。他所说的是,如果你有一个正则表达式连接为P.Q,无论P和Q是什么,你都可以通过将P的结束状态与空字符串连接到Q的起始状态来加入他们的AFN。

所以,在他的例子中,他正在创建一个AFN代表a.b.表示a和b隔离的AFN是微不足道的,如:

->o-a->O

->o-b->O

因此,为了加入两者,你只需遵循算法,将第一个AFN的最终状态与第二个算法的起始状态建立一个空字符串连接,如下所示:

->o-a->o-E->o-b->O

在这种特殊情况下,由于创建a.b AFD非常容易,我们会查看它并感知这个空字符串是不必要的。但是这个过程适用于每一个连接 - 事实上,这显然相当于一个简单正确的AFD只是强化了他的陈述:过程有效。

希望有所帮助。