做题步骤:(三步走)
正则表达式 -----> NFA -----> DFA -----> DFA最小化
例题1:求与正则表达式(a|d)*对应的最小化DFA。
(1) 求正则表达式(a|d)*对应的NFA
(2)NFA转化为DFA
以非终结符集(此题为a,b)为列,画表格。
构造Ⅰ0规则如下:
① 把开始状态S加入Ⅰ0中。
② 从开始状态S出发,把 能通过识别ε到达的状态 都加入到Ⅰ0中。
得到Ⅰ0 {S,1,Z} 。
然后构造其他Ⅰi
依次看Ⅰ0中的状态,通过识别a,能够到达哪些状态。将这些状态加入Ⅰi。
如果,识别a后,还可以通过识别ε得到新状态,就把这些状态也加入Ⅰi。
得到Ⅰi{1,Z} ,这个新Ⅰi与Ⅰ0不同,因此记为Ⅰ1。
同理,依次看Ⅰ0中的状态,通过识别b,能够到达哪些状态。
如果,识别b后,还可以通过识别ε得到新状态,就把这些状态也加入Ⅰi。
将这些状态加入Ⅰi。
得到Ⅰi{1,Z},这个新Ⅰi与Ⅰ1相同,因此记为Ⅰ1。
存在新产生的Ⅰ,就把这些新产生的Ⅰ按照顺序依次写到第Ⅰ列上。
然后,重复上述操作,直至不再产生新的Ⅰ为止。
最终得到表格如下所示:
Ⅰ | Ⅰa | Ⅰb |
Ⅰ0 {S,1,Z} | Ⅰ1{1,Z} | Ⅰ1{1,Z} |
Ⅰ1{1,Z} | Ⅰ1{1,Z} | Ⅰ1{1,Z} |
设Ⅰ0为初始状态S,Ⅰ1为终止状态Z。
得到未化简的DFA如下:
(3)DFA最小化
① 找初态集和终态集
终态集就是在第(2)步中,表格里求出来的Ⅰ0,Ⅰ1,Ⅰ2.........中,包含终止状态Z的集合。
初态集就是除了终态集以外的其他状态组成的集合。
因此,本题的
终态集为 {Ⅰ0,Ⅰ1}
初态集为空。
下面分别对这两个集合进行如下分析:
如果Ⅰ0能够通过a或者b到达终态集{Ⅰ0,Ⅰ1}以外的新状态,则将Ⅰ0从终态集中独立出来。
同理,处理其他状态。
同理,处理初态集。
最后得到新的集合为{Ⅰ0,Ⅰ1},发现Ⅰ0和Ⅰ1同处一个集合内。
就将这两个状态Ⅰ0和Ⅰ1合并,记作终止状态Z。
得到最终化简后的DFA为: