DFA最小化算法课件.pptVIP

  • 18
  • 0
  • 约小于1千字
  • 约 6页
  • 2022-11-05 发布于四川
  • 举报
DFA最小化算法 前提:理解多余状态,死状态,等价状态,可区别状态 DFA的化简算法:对于DFA M=(S,Σ,f,S0,Z) (1)首先将DFA的状态集进行初始化,分成Π=(Z,S-Z); (2) 用下面的过程对Π构造新的划分Π new for (Π中每个组G) do //每个组都是一个状态集 begin 把G划分成小组,G中的任意两个状态Si和Sj在同一组中,当且仅当对于Σ中任意输入符号a ,Si和Sj的a转换是到同一组中,move(Si,a) ∈Gi ,move(Sj,a) ∈Gi。这样,只要Si和Sj的a转换是到不同的组中,则说明Si和Sj是可区别的,可进行划分。 在Π new中用刚完成的对G的划分代替原来的G。 end ; Π := Π new; (3)重复执行(2),直到Π中每个状态集不能再划分(Π new= Π)为止; (4)合并等价状态 ,在每个G中,取任意状态作为代表,删去其它状态; (5)删去无关状态,从其它状态到无关状态的转换都成为无定义。 例子:对上一次的NFA所转化的DFA进行最小化 第一步: (1)首先将DFA的状态集进行初始化,分成Π=(Z,S-Z); Π = ({A,B,C,D},E) Z为终态,S-Z为除去终态的状态集 第二步:对于{A,B,C,D}这个集合进行划分 f(A,a) = B f(B,a) = B f(C,a) = B f(D,a) = B 所以对于ABCD读入a所得的结果都为B,目前无法划分 f(A,b) = C f(B,b) = D f(C,b) = C f(D,b) = E 此时,读入了b后,发现目前,至少AC和B和D是进入了不同状态,即为可区分状态,将其分为({A,B,C},D,E) 第三步:对于{A,B,C}这个集合进行划分 f(A,b) = C f(B,b) = D f(C,b) = C A,C和B为可区分状态,所以又分为({A,C},B,D,E) 此时,AC不可划分,则AC为等价状态。 处理方法:将AC看做一个状态,用其中的一个取代另一个,但是要保留被取代的状态上的关系

文档评论(0)

1亿VIP精品文档

相关文档