NFA 转 DAF : subset construction(子集构造法)
对于一个正则表达式,虽然说NFA和DFA从input state走到final state总是能满足正则表达式的要求,但是NFA对于一个特定的例子可以有无限多中走法,而DFA对于一个特定的例子只有唯一的走法,所以DFA更利于编程转换成代码
转换的核心思想就是把NFA路线中的多个可能性的选择合并看作一个DFA state

q1 → d1
q2 → d2
(q1,q2) → d3
∅ → d4
可以看出NFA的2个state可以最多有4个DFA state
如果有3个NFA state 那么可以最多有8个DFA state 即:{q1,q2,q3}
{q1} {q2} {q3} {q1,q2} {q1,q3} {q2,q3} {q1,q2,q3} {∅}
可以看出 这八个DFA state都是{q1,q2,q3}的子集 所以这也是为什么叫subset construction
总结 如果有n个NFA state 那么可以有至多
个DFA state
接下来看具体转换过程</

本文详细介绍了正则表达式中的NFA如何通过子集构造法转化为DFA。通过实例解析了NFA的E-closure操作以及转换过程中状态的确定,强调了DFA在编程实现上的优势。转换过程中可能出现的状态数量是指数级的,但通常并不需要所有可能的状态,且该转换工作在编译器设计时一次性完成。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



