子集构造算法接受一个NFA,输出一个DFA(输出的还不是最简的DFA)
基本概念
- edge(s,c):从状态s出发,沿着c边可以到达的NFA状态集合
closure(S):对于状态集合S,从S中的任意一个节点元素出发,只通过epsilon边就可以到达的状态集合;
基本操作
epsilon_closure(s):获取从状态s开始,只通过epsilon转换就可以到达的NFA状态节点的集合;
- epsilon_closure(T):能够从状态集合T的某个状态出发,只通过epsilon转换就可以到达的状态节点的集合;
- move(T,a):能够从集合T中的某个状态s出发,仅仅通过标号为a的转换到达的NFA状态集合;
算法
本质上还是构建了一张转换表;//伪代码while(在Dstates中,有一个没有标记){给T加上标记;for(每个输入符号a){U = epsilon_closure(move(T,a));if(U不在Dstates中)将U加入到Dstates中,并且不用加标记;Dtran[T,a] = U;}}
