编译原理(二) NFA的确定化及DFA的最小化

来源:互联网 发布:golang mgo.v2 编辑:程序博客网 时间:2024/05/29 05:52

1. NFA的确定化

1.1. 明确NFA的定义

一个非确定的有穷自动机(NFA)M是一个五元式:

  • M=(S,,δ,S0,F)
    • S
    • δS×Sδ:S×2S
    • S0S,
    • F S , 是一个终态集(可空)

1.2. 定义运算

定义对状态集合I的几个有关运算:

  • 状态集合I的ε-闭包,表示为ε-closure(I),定义为一状态集,是状态集I中的任何状态s经任意条ε弧而能到达的状态的集合。状态集合I的任何状态s都属于ε-closure(I)。
  • 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可从I的某一状态经过一条a弧而到达的状态的全体。
    定义Ia = ε-closure(move(I,a))

1.3. 算法描述

  • 每次从队头取出一个集合,(开始队列内只有初态集合I的ε-闭包(I) ),然后得到它对于任意一个字符a的Ia=εclosure(move(I,a))
  • 然后如果当前状态之前没有出现过,那么当前状态作为一个新的状态I,放入队列。
  • 一直做如上操作,直到队列为空

2. DFA的最小化

2.1. 明确DFA的定义

一个确定的有穷自动机(DFA)M是一个五元式:

  • M=(S, ∑, δ, s0, F)其中
    • S是一个有限集,它的每个元素称为一个状态。
    • ∑是一个有穷字母表,它的每个元素称为一个输入字符
      -δ是一个从S×∑至S的单值映射。δ(s,a)=s’意味着:当现行状态-为s、输入字符为a时,将转换到下一个状态s’。我们称s’为s的一个后继状态。
    • s0∈S,是唯一的初态。
    • F S,是一个终态集(可空)

2.2 算法描述

  • DFA M =(K,∑,f, k0,, kt),最小状态DFA M’
    • 1.构造状态的初始划分0:终态kt 和非终态K- kt两组
    • 2.对∏施用传播性原则 构造新划分new
    • 3.如new=,则令new=并继续步骤4,否则:=new重复2
    • 4.为final中的每一组选一代表,这些代表构成M’的状态。若k是一代表且f(k,a)=t,令r是t组的代表,则M’中有一转换f’(k,a)=r M’ 的开始状态是含有K0的那组的代表 M’的终态是含有Kt的那组的代表
    • 5.去掉M’中的死状态.


阅读全文
0 0
原创粉丝点击