Regex Kleene星的确定性有限自动机

Regex Kleene星的确定性有限自动机,regex,finite-automata,dfa,kleene-star,Regex,Finite Automata,Dfa,Kleene Star,我读到每个非确定性有限自动机(NFA)都可以转换成确定性有限自动机(DFA)。kleene star regex可以这样做吗,比如说a* 以上是适用于*的NFA是。Kleene星确定性有限自动机有两种状态。起始状态是最终状态,对于a,起始状态转换为自身状态,对于所有其他符号,起始状态转换为其他状态。对于每个符号,另一个状态都有一个到自身的转换 因此,它接受空字符串(因为起始状态是final)和任意次数的a。任何不是a的东西都会将DFA发送到另一个状态,该状态是非最终状态,并且没有转义 如果将Kl

我读到每个非确定性有限自动机(NFA)都可以转换成确定性有限自动机(DFA)。kleene star regex可以这样做吗,比如说a*


以上是适用于*

的NFA是。Kleene星确定性有限自动机有两种状态。起始状态是最终状态,对于
a
,起始状态转换为自身状态,对于所有其他符号,起始状态转换为其他状态。对于每个符号,另一个状态都有一个到自身的转换

因此,它接受空字符串(因为起始状态是final)和任意次数的
a
。任何不是
a
的东西都会将DFA发送到另一个状态,该状态是非最终状态,并且没有转义


如果将Kleene星形应用于比单个符号更复杂的正则表达式,则会变得稍微复杂一些,但始终可以这样做:只需将正则表达式的NFA插入显示图像的红色部分,然后应用标准算法将NFA转换为DFA。我强烈建议研究这个算法;如果您理解了它的工作原理,您将看到为什么每个NFA都可以转换为DFA。

它只是一个单一的启动状态,也是接受状态。它有一个接受“a”的自循环


那么,为什么需要Kleene闭包DFA?就像OP的形象一样。当ε可以用一个状态表示时,为什么ε是必需的?如果kleene星的操作数是单个符号,则ε只能用一个状态表示。ε变换使NFA足够通用,可以处理kleene星下的任何正则表达式。