哪一个是显示RE联盟0 + 1的正确方法?我看到了这两种方式,但我认为两者都是正确的。如果两者都正确,为什么要复杂化?
答案 0 :(得分:2)
正如你所说,它们都是正确的。
第一个看起来像是使用一组标准规则生成的 - 在这种情况下,它是过度杀戮(而且看起来很傻),但在更复杂的情况下,遵循简单的规则比容纳整个事情更容易你的头脑,从头开始写一个等价的NFA。
通常,可以重写NFA,使其具有单个最终状态(显然已经只有一个开始状态)。
然后,这种形式的两个NFA可以这样组合,即他们在组合时接受的语言是他们单独接受的语言的联合 - 这对应于常规的或(+
)表达。要以这种方式组合NFA,只需创建一个新节点作为起始状态,并将其与ε-转换连接到两个NFA的起始状态。
然后,为了在单个最终状态中整齐地结束NFA(以便我们可以根据需要递归地使用此NFA用于其他联合),我们创建一个额外的节点作为统一的最终状态和ε-connect旧的最终状态(失去最终状态)到它。
使用上面的一般规则,很容易得出第一个图表(两个NFA联合在一起,第一个匹配0
,另一个1
) - 第二个很容易通过常识,因为它是如此简单的正则表达式; - )
答案 1 :(得分:0)
第一个构造属于具有电子移动的NFA类,它是一般NFA类的扩展。电子移动使您能够在不需要输入的情况下进行转换。对于转换函数,重要的是仅使用e-transitions计算从给定状态可到达的状态集。显然,添加电子移动不允许NFA接受非常规语言,因此它最终等同于NFA,然后是DFA。
Thompson的构造算法使用带有电子移动的NFA从任何正则表达式构建自动机。它提供了一种从正则表达式构造自动机的标准方法,当它方便自动化构造时。