有穷计算机:
有限状态机是什么?:
有点像图灵机,也可以用纸带来表示:
定义:
状态转移的表示方法:
图:
表:
这些地方,状态转移函数处理的都是字符,现在定义扩展一下,可以读字符串:
递归定义,就是把字符串一个一个读起来。
正则语言 :
只要可以被某一个自动机接受,就可以是一个正则语言。
非确定有穷状态自动机:
注意:之前是从一个状态转移到另一个状态,现在是从一个状态集合转移到另一个状态集合(可以同时拥有多个状态)
和前面一样,单个字符可以有状态转移,也可以是读入一个字符串:
DFA和NFA的等价性:
如何构造呢?:
直接把NFA里的状态集合变成DFA里的一个状态,这样就可以构造出来了。
接受状态集就是所有包含NFA可接受状态的集合。
状态转移函数就是把DFA当前的状态(也就是一个NFA状态集合)里面的全部状态使用NFA的状态转移函数,就产生了一个新的状态集合,也就是DFA的状态。
其实可以看出,我们已经用NFA构造出了一个DFA。接下来是详细证明:
证明到了这个就好办:
一个例子:
带有空转移的NFA:
举个例子:
注意:例如q0状态时接收到了1,那么接下来的状态就是q0,q1,q2,q3,并不是说q1,q2会消失掉。
状态的空串闭包:
就是和q可以用空串相连的。
有状态的闭包,当然也就有状态集的闭包:
扩展转移闭包:
其实就是把到达某个状态后,可能因为继续发生空转移而到达的所有可能状态包括进来。
带空转的NFA和DFA也可以等效:
要证明当然还是子集构造法:
可以和之前的证明对比一下:
可以看到,各种和状态有关的东西变成了状态的闭包,也差不多。
举个例子:
直接从初始状态往后退,就可以得出那些状态要删去。