有穷自动机
分为两种,确定性有穷自动机(DFA)和非确定性有穷自动机(NFA)。
对于有穷自动机更详细的内容,可以参考这里。
NFA 转换为 DFA(子集构造法)
输入:一个
输出:一个
有如下三个操作,其中,
操作 | 描述 |
---|---|
能从 | |
能够从 | |
能从 |
大致的算法流程如下:
- 建立一个容器,存放
的状态和转换,分别记为 和 。 - 令
加入 ,且它未加标记。其中,$ s_0$ 是 的起始状态。 - 从
取出一个未标记的状态 ,将其加上标记。并对于字母表中的每一个输入符号 ,令 ,然后再令 ,加入 中。对于每一个产生的 , 如果它不在 之中,将其加入并不加标记。 - 重复 3 的操作,直到
中所有状态均被标记。
正则表达式转换为
注意:计算
最小化
初始分划:将接受状态划分出来。
在每一个分划中,遍历字母表,尝试找到能将该划分区分成多个的输入字符(串)。重复这一操作直到不能继续划分,这时,每一个划分中的状态对于任意字符串的行为均相同。将这些划分作为新