算法描述:
伪代码:
function E(s){
return NFA中状态s经过空转移到达的状态集合;
}
function Ee(T){
return NFA中状态集合T中的每个状态通过空转移到达的状态集合;
}
function move(T,a){
return NFA中状态集合T中某个状态输入a到达的状态集合;
}
D = E(NFA开始节点);
D中状态未被标记;
C = [所有输入字符集合];
DFA = [][];//二维数组,最后的结果
while D中含有没有被标记的状态T {
标记T;
for(i = 0;i < C.size();++i){
a = C[i];//每个输入的字符
M = move(T,a);
U = Ee(M);
if U == empty{
continue;
}
if U not in D{
D.append(U);
并且U未被标记;
}
NFA[T][a] = U;
}
}
show(NFA);
DFA最小化
案例1
案例2