DFA与NFA的等价性
DFA与NFA的等价性,使得L(M)=L(M’)
NFA 和DFA的差别
状态 | NFA | DFA |
---|---|---|
初始状态 | 不唯一 | 唯一 |
弧上的标记 | 字(单字符字、ε) | 字符 |
转换关系 | 非确定 | 确定 |
DFA与NFA的等价性证明
假定NFA M=<S, Σ, δ, S 0 , F>,我们对M的状态转换图进行以下改造:
引进新的初态结点X和终态结点Y,X,Y∉S,从X到S 0中任意状态结点连一条ε箭弧, 从F中任意状态结点连一条ε箭弧到Y。(解决初始状态唯一性)
对M的状态转换图进一步施行替换,其中k是新引入的状态。(简化弧上的标记)
然后下面是NFA转换前后的状态
总来时就是两步走,第一步加入唯一的初态,第二步就是引入中间节点,将弧上的标记拆分成单字符
DFA与NFA的等价性证明
- NFA确定化--子集法(解决ε弧和转换关系)
- 设I是的状态集的一个子集,定义I的ε-闭包ε-closure(I)为:
- 若s∈I,则s∈ε-closure(I);
- 若s∈I,则从s出发经过任意条ε弧而能到达的任何状态s’都属于ε-closure(I) 即,ε-closure(I)=I∪{s’|从某个s∈I出发经过任意条ε弧能到达s’}
设a是Σ中的一个字符,定义 I a = ε-closure(J)
其中,J为I中的某个状态出发经过一条a弧而到达的状态集合。
转换过程
确定化:不失一般性,设字母表只包含两个 a 和b,我们构造一张计算状态集的转换表:
- 首先,置第1行第1列为ε-closure({X})求出这一列的I a ,I b ;
- 然后,检查这两个I a ,I b ,看它们是否已在表中的第一列中出现,把未曾出现的填入后面的空行的第1列上,求出每行第2,3列上的集合...
- 重复上述过程,直到所有第2,3列子集全部出现在第一列为止
转换矩阵:
I | Ia | Ib |
---|---|---|
ε-closure({X})={X,1,2} | {1,5,2} | {1,6,2} |
{1,5,2} | {1,3,5,2,4,Y} | {1,6,2} |
{1,6,2} | {1,5,2} | {1,3,6,2,4,Y} |
{1,3,5,2,4,Y} | {1,3,5,2,4,Y} | {1,6,4,2,Y} |
{1,3,6,2,4,Y} | {1,5,4,2,Y} | {1,3,6,2,4,Y} |
{1,5,4,2,Y} | {1,3,5,2,4,Y} | {1,6,4,2,Y} |
{1,6,4,2,Y} | {1,5,4,2,Y} | {1,3,6,2,4,Y} |
- 把表看成状态转换矩阵,子集视为状态
- 转换表唯一刻划了一个确定的有限自动机M
- 初态是
ε-closure({X})
2.. 终态是含有原终态Y的子集
- 初态是
- 不难看出,这个DFA M与M’等价
- 对于每个NFA M存在一个DFA M ’ ,使得 L(M)=L(M’)
- NFA和DFA等价
矩阵项化简
参考中国大学MOOC 国防科技大学 《编译原理》课程文档
来源:oschina
链接:https://my.oschina.net/u/2555967/blog/3195441