编译器-NFA转DFA

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 那么可以有至多2^N个DFA state

接下来看具体转换过程

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值