目录
1.DFA和NFA的等价性
(1)对于每个NFA M存在一个DFA M’,使得L(M)=L(M’)
1.等价性证明
2.NFA的确定化
思路:NFA和DFA的差别
NFA | DFA | |
---|---|---|
初始状态 | 不唯一 | 唯一 |
弧上的标记 | 字(单字符字,ε) | 字符 |
转换关系 | 非确定 | 确定 |
我先来简单的给大家解释一下他的定义
将NFA转化为DFA,我们采用的方法叫做子集法,比如我们要求对Ia求闭包,我们该如何操作呢:
1.设程序开始的状态为X,对X求关于ε的闭包,就是X经过任意多个ε能到达的状态集合,连同X一起记为I。
2.求a对I的闭包,就是I中的元素经过一步a(以Ia闭包为例)能到达什么,这些状态都属于a对I的闭包,我们将其记为ε-closure(I)或者是记为J。
3.对我们求得的J求对ε的闭包,看看它经过任意多个ε能到达的状态,将这些状态连同J一起组成Ia,记为Ia=ε-closure(J).
2.DFA与NFA等价性证明
我们先来看一道例题
我们可以看出这是一个NFA,我们要将其化为DFA
对开始状态X做ε闭包,X可以经过ε到达1和2,我们可以知道I={X,1,2},我们对I再求对a的闭包,X不能经过a状态,1经过a状态还是a,2经过a状态到达5,故J={1,5},对J求关于ε的闭包,1经过ε到达2,5不能经过ε,故Ia={1,2,5}。Ib同理进行推导。
下一行,我们将Ia中的状态集合写在I中继续进行推导,直到所有的状态都已经被推导结束为 止。
对应上表的每一行,对其进行编号,最后画出DFA。
3.DFA的化简
1.把状态集划分为一些不相交的子集,使得任何两个不同子集的状态是可区别的,而同一子集的任何两个状态是等价的。
2.可区别:存在一个字α,要么s读出α停止于终态而t读出α停止于非终态,要么t读出α停止于终态而s读出α停止于非终态。
具体操作过程
大家可能看的有点懵,下面我列举一道例题供大家理解
1.我们先将将其划分为非终态I1和终态I2,I1={0,1,2},I2={3,4,5,6}
2.对I1进行识别a操作,0识别a是1,1识别a是3,2识别a之后到1,故Ia1={1,3},1和3在I1和I2两个子集中,所以{0,1,2}要进行划分,0,2识别a之后到1,1识别a之后到3,故I11={0,2},I12={1},I2={3,4,5,6}
3.接着进行划分,I11进行识别a操作,0识别a之后是1,2识别a之后是1,不符合划分标准,再对其进行识别b操作,0识别b是2,2识别b是1,Ib11={2,4},2在I1中,4 在I2中,还要进行划分,I111={0},I112={2},I12={1},I2={3,4,5,6}
4.对I2进行划分,分别进行识别a和识别b操作,Ia2={3,6},Ib2={4,5},都在I2集合中,不用对其进行划分