为什么DFA中不能存在多态?

时间:2013-02-01 17:34:33

标签: regex dfa

我的问题是,state3也可以命名为state2,或者一般来说。为什么我们可以命名具有相同名称的州。 对于表达式ab+a*a 第一个州采取'a'。 然后它会转到state2 / state3。enter image description here

2 个答案:

答案 0 :(得分:2)

有限状态机被定义为包含(除此之外)状态的,因此有意义地对每个状态进行唯一标识。国家的命名与他们可能被命中的命令毫无关系。

FSM涉及一个周期并不罕见。一个例子是FSM接受偶数个0的二进制字符串,由下面的状态表表示:

Input --> | 0      | 1      |
\/--State |        |        |
----------|--------|--------|
state0    | state1 | state0 |
state1    | state0 | state1 |

States: {state0, state1}
Start state: state0
Accepting states: {state0}

在这种情况下,机器可能会从state0移动到state1并多次返回。如果我们每次都必须有一个新的状态,那么机器的复杂性会爆炸到无穷大。

答案 1 :(得分:1)

只要它们是唯一可识别的,您就可以将自己的状态命名为任何您想要的状态。

如果状态没有区别,那么它们首先不应该是两个独立的状态


您的特定示例没有任何or,因此您的正则表达式永远不会使用像这样分支的DFA。

但是,假设你有像

这样的正则表达式

a(bb | cc),可以匹配abbacc

abac是不同的状态,它们必须彼此区分,并且它们的输出会得出不同的结论。

如果你在ab并且你得到c而不是你必须回到起点,但如果你在州ac并得到{{1}而不是你前往c并完成。