第二章确定有限自动机.pptVIP

  • 24
  • 0
  • 约6.05千字
  • 约 36页
  • 2018-10-19 发布于山东
  • 举报
复习 一.确定有限自动机 确定有限自动机M为一个五元组: M = ( S ,? , s0 ,f ,Z ),其中: S:是一个有穷状态集,它的每个元素称为一个状态; ?:是一个有穷字母表,它的每个元素称为一个输入 字符; s0?S:是唯一的一个初始状态(开始状态); F:是状态转换函数:S??? S,且单值函数; Z?S:是终止状态集(可接受状态集、结束状态集). 二、 非确定有限自动机NFA 一个非确定有限自动机(NFA)M是一个五元组: M = ( S, ?, S0, f, Z ),其中: S:是一个有限集合,它的每个元素称为一个状态; Σ:是一个有穷字母表,它的每个元素称为一个输入字符; S0: S0 ? S , 是非空初始状态集; f:是状态转换函数,它是一个从S× (?∪{?}) 到S 的子集的映射,即S× (?∪{?}) → 2s ; Z: Z ? S ,是终止状态集. 三.DFA的两种表示方式 状态转换图 :用有向图表示自动机 DFA接受的字符串 对于?*中的任何字符串t,若存在一条从初始结点到某一终止结点的路径,且这条路上所有弧上的标记符连接成的字符串等于t,则称t可为DFA M所接受(识别). 若DFA M的初始状态同时又是终止状态,则空字符串可为DFA M所接受(识别). DFA M 所能接受的字符串的全体记为L(M). 状态转换矩阵:用二维数组描述DFA 五、DFA的实现1 状态转换矩阵的形式: 1.当前状态State置为初始状态; 2.读一个字符 ? CurrentChar; 3.如果CurrentChar?Eof并且 T(State,CurrentChar)?error, 则当前状态转为新的状态: State = T(State,Current), 读下一字符 ? CurrentChar ; 重复第3步工作. 4.如果当前字符为Eof并且当前状态属于终止状态,则接受当前字符串,程序结束;否则报错. DFA的实现2 状态转换图的形式: 每个状态对应一个带标号的switch语句 转向边对应goto语句 1.非终止状态对应的switch语句 2.终止状态对应的switch语句 例: 2.3.3 NFA到DFA的转换 定义2.26 有限自动机的等价 对于给定的有限自动机M1和M2,如果有 L(M1) = L(M2),则称有限自动机M1和M2等价. 定理2.5 对于每一个非确定有限自动机M,存在一个确定有限自动机M’,使得L(M)=L(M’). NFA确定化由NFA构造出与其等价的DFA称为NFA确定化. 两个重要函数: ㈠ 状态集I的?闭包 设I是NFA M状态集的子集,定义I的?闭包?-CLOSURE(I)为: ① 若q ∈I ,则q ∈?_CLOSURE(I). ② 若q ∈I,那么从q出发经任意条ε弧而能到达的任何状态q’都属于?-CLOSURE(I). 例: ?-CLOSURE({1})={1,2} ?-CLOSURE({1,5})={1,5,2,6} ㈡ 状态集I的a转换 若I={S1, … , Sm }是NFA的状态集的一个子集(状态子集),a??, 则定义: Ia = ?-CLOSURE(J ) 其中: J = f (S1,a) ? f (S2,a)…? f(Sm,a) 例: {1,2}a =?-CLOSURE(J ) J=f(1,a) ? f(2,a)={4,5} {1,2}a =?-CLOSURE({4,5} )={4,5,7,6,2} NFA A‘到DFA A的转换过程(确定化): 1.令I0= ?_CLOSURE(S0 )作为DFA的初始状态,其中S0 为NFA初始状态集. 2.若DFA中的每个状态都经过本步骤处理过.则转步骤3;否则任选一个未经本步骤处理的DFA状态Si,对每一个a??,进行下述处理: ①计算 Sj = Sia ② 若Sj≠Φ ,则令f(Si,a)= Sj , 若Sj不为当前DFA的状态,则将其作为DFA的一个状态. 转步骤2. 3.若S’ =[S1,…,Sn]是A的一个状态,且存在一个Si是A’的终止状态,则令S’为A的终止状态. 例1:将如下的NFA转化为DFA.

文档评论(0)

1亿VIP精品文档

相关文档