第三章有穷自动机
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:将图示的DFA M最小化。
a
b
6
4
a
a
a
b
a
1
ab
5a
7
b3
b
b
2 b
1、将M状态分为两个子集: P0=({1,2,3,4},{5,6,7})
2、{1,2,3,4}读入a后划为: P1=({1,2},{3,4},{5,6,7})
3、进一步划分: P2=({1,2},{3},{4},{5,6,7})
对M的状态集S进行划分的步骤:
①把S的终态与非终态分开,分成两个子集, 形成基本划分,属于这两个不同子集的 状态是可区别的。
②假定某个时候已含m个子集,记={I(1) , I(2) , …,I(m) }且属于不同子集的状态是可 区别的,再检查中的每个I能否进一步划 分,对于某个I(i) ,令I(i) ={S1,S2,…,Sk}, 若存在一个输入字符使得move(I(i) ,a)不包 含在现行的某一子集I(i)中,则将I(i)一分 为二。
若M的某些结既是初态结,又是终态结,
或者存在一条从某个初态结到某个终态结 的道路,则空字可为M所接受。
例: NFA M=({0,1,2,3,4},{a,b},f,{0},{2,4})
f(0,a)={0,3} f(2,b)={2} f(0,b)={0,1}
f(3,a)={4} f(1,b)={2} f(4,a)={4}
M’=(K, ,f,S,Z)
一个含有m个状态和n个输入字符的NFA 可表示为一张状态转换图,该图含有m个 状态结,每个结可射出若干条 箭弧与别的 结点相连接,每条弧用*中的一个字(不 一定要不同的字,且可以为空字)作标记 (称输入字),整个图至少含有一个初态 结以及若干个终态结。
NFA与DFA的区别
有穷自动机分为两类:
(1)确定的有穷自动机 (Deterministic Finite Automata简称DFA)
(2)不确定的有穷自动机 (Nondeterministic Finite Automata简称 NFA) 。
3.1.1 确定有穷自动机的形式定义
一个DFA M=(K,Σ,f,S,Z),其中 (a)K是一个有限状态集合。 (b)Σ是一个字母表,它的每个元素称为一个输入
如果DFA M的两个状态s和t不等价,则称
这两个状态是可区别的。
DFA中,状态s和t等价的条件是:
一致性条件:状态s和t 必须同时为可接受 状态(终态)或不可接受状态(非终态)。
蔓延性条件:对于所有输入符号,状态s和 t 必须转换到等价的状态里。
分割法合并等价状态
一个DFA M的状态化简过程就是把M 的状态集划分成一些不相交的子集,使得 任何不同的两子集的状态都是可区分的, 而同一子集的任何两个状态都是等价的。 最后,从每个子集选出一个代表(代表该子 集),同时消去其它等价状态。
② 检查Ia 和Ib,看它们是否已在表的第一列 中出现,把未曾出现者之一填入下一空行
的第一列上,再计算该行的第二、第三列 上的Ia 和Ib。
③ 重复第二步,直至表中所有第二、第三列 上的元素全部再第一列出现为止。
因为M中的状态(子集)的个数是有限的,所 以上述三步必定在有限步骤内终止。
④ 将由上述过程得到的最终形式的表看作一
字符。
(c)S∈K,S 称为初始状态,唯一。 (d)ZK, Z称为终态集合, 终态也称可接受状态
或结束状态。
(e)f是转换函数,是一个从K×Σ到K的单值映射。 f(ki,a)=kj(ki,kj∈K,a∈Σ)kj称为ki的一个后 继状态。
确定性的体现:初始状态唯一; 转换函数
为单值映射。
例: 设DFA M=({S,U,V,Q},{a,b},f,S, {Q})其中 f(S,a)=U, f(S,b)=V f(U,a)=Q, f(U,b)=V f(V,a)=U, f(V,b)=Q f(Q,a)=Q,f(Q,b)=Q
假定I是M中状态集的一个子集,定义 _closure(I)如下: 若qI,则q_closure(I); 若q_closure(I),q是由q出发经多条 弧到达的状态,则q_closure(I)。
定义:假定I是NFA M中状态集的一个子集,
a,定义
Ia=_closure(J) 其中J是所有那些可从子集I中的任一状态 出发,经过一条a连线(跳过a连线前的ε连 线)而到达的状态(结)的全体。
l, d
l, d
l
q0
q1
l q0
q1
q2
非 l,d
图(a)
图(b)
如果赋予状态q0、q1与q2一定的操作,则
可得识别单词标识符的程序流程图(见下 图)。
q0
char ch, name[k] name read(ch)
本章介绍有关有穷自动机的基本概念和 理论以及正规文法、正规表达式与有穷自动 机之间的相互关系。
§3.1 有穷自动机的形式定义
有穷状态自动机(Finite-state Automata 或简称FA)在识别功能上与正 规文法类等价,而且也等价于一个特殊类 型的语言产生器——正规表达式(Regular Expression)。因此许多简单的程序语言 都可由FA所识别。事实上,它是描述词法 的有效工具,也是进行词法分析的主要理 论基础。
4、考察{5,6,7},将P2划分为: P3=({1,2},{3},{4},{5},{6,7})
P3不可再划分,从而1与2,6与7等价。
b
6
4
a
a
b
a
1
a
b
5
b b
3
3.2.4 从化简后的DFA到程序表示
识别标识符的DFA(见图 (a))需改为图
(b)所示状态,其中,l代表字母,d代表数 字。
1扩充的转换函数f该定义是一个递归定义说明当自动机处在状态q且面临某个输入串tt时则首先应用函数fqtp然后应用函数k是一个单值函数即对任何状态kk和输入符号afka唯一地确定了下一个状态从状态转换图来看若字母表有n个输入字符那么任何一个状态结点最多有n条弧射出且每条弧以一个不同的输入字符标记
第三章 有穷自动机
例:有一NFA M,用造表法使其确定化。
2a 0 1
4b
3 6
5
7 a 8 b 9 b 10
b
2
b
aab
0a 1 b 3 b
4
a
a
3.2.2 确定的有穷自动机的化简
所谓一个确定的有穷自动机M的化简是指:
寻找一个状态数比M少的DFA M’, 使得 L(M)=L(M’),可通过消除多余状态和合并 等价状态而转换成一个最小的与之等价的 有穷自动机。
NFA有一个开始状态集,而DFA只有一个 开始状态。
NFA的映射是QQ的子集,是一个多 值映射,而DFA的映射是QQ,是一 个单值映射。
DFA是NFA的特例,对于每个NFA M,存 在一个DFA M’,使得L(M)=L(M’)。
对于*中的任何一个串t,如果存在一条从
某一初态结到某一终态结的道路,且这条 道路上的所有弧的标记依序连接成的串等 于t,则称t可为NFA M所识别(读出或接 受)。
造表法的具体步骤:
假定给定的NFA M中仅含两个符号a, b。可用如下方法将M确定化:采用造表的 方式,该表的每一行有三列(若中含有n个 符号,则该表有n+1列),第一列记为I,第 二、三列分别记为Ia ,Ib 。
①置该表的第一行第一列为_closure(Q0), 即一列包含M初态集Q0 的ε_闭包。然后计 算它的Ia 和Ib,分别填入第二、三列上,一 般,若某一行的第一列上的I已确定,便可 根据前述定义求出这一行的第二、第三列 上的Ia 和Ib。
消除多余状态
多余状态是指从该自动机的开始状态出发, 任何输入串也不能到达的状态。
A
01 S0 S1 S5 0 S1 S2 S7 1 S2 S2 S5 1 S3 S5 S7 0 S4 S5 S6 0 S5 S3 S1 0 S6 S8 S0 1 S7 S0 S1 1 S8 S0 S6 0
B
01 S0 S1 S5 0 S1 S2 S7 1 S2 S2 S5 1 S3 S5 S7 0 S5 S3 S1 0 S6 S8 S0 1 S7 S0 S1 1 S8 S0 S6 0
所有为自动机M所能接受的串组成一个集
合,称这个集合为自动机M所能接受的语 言,用L(M)表示:
L(M)={ t | f(S,t)Z,t*}
对于任何两个有穷自动机M和M’,如果
L(M)=L(M’),则称M与M’是等价的。
3.1.5 非确定有穷自动机
NFA定义
一个不确定的有穷自动机NFA M’是一个 五元组:
例:DFA M=({S,A,B,C},{0,1},,S,{S}), 且定义为(S,0)=B,(S,1)=A, (A,0)=C,(A,1)=S,(B,0)=S, (B,1)=C,(C,0)=A,(C,1)=B
状态图表示,矩阵表示:
状
A
A
C
S
B
S
C
C
A
B
自动机处理字符串110101和11101的轨迹
f(V,a)=U f(V,b)=Q U Q V
f(Q,a)=Q f(Q,b)=Q V U Q
QQQ
3.1.3 状态转换图
图中标有的为开始状态,标有双圈的状态为终止 状态。
若f(Ki,a)=Kj,则从状态结点Ki到状态Kj画标记为a 的弧。
a
q0
q1
a
bb
bb
a
q3
q2
a
3.1.4 自动机的等价性
因为(1)初始状态唯一是S, (2)每个转换函数均为单值映射。
所以该FA为确定有穷自动机。
3.1.2 状态转换表
DFA的映射关系可以由一个矩阵表示,矩 阵的行标表示状态,列标表示输入字符,
矩阵元素表示f(s,a)的值,这个矩阵称为状
态转换表。
a
b
f(S,a)=U f(S,b)=V S
U
V
f(U,a)=Q f(U,b)=V
DFA的确定性表现在转换函数f: KK
是一个单值函数,即对任何状态kK和输 入符号a,f(k,a)唯一地确定了下一个状 态,从状态转换图来看,若字母表含有n 个输入字符,那么任何一个状态结点最多 有n条弧射出,且每条弧以一个不同的输 入字符标记。
自动机接受字符串x
如果对于某一自动机M=(K,,f,S,Z), x*,有f(S,x)=P,且PZ,则x为该自动 机M所接受(识别),即自动机从开始状 态开始,在读完全部输入串以后,自动机 恰恰到达终止状态,则该输入串能被该自 动机所接受。
为了讨论自动机的等价性,先对DFA 中的映射进行扩充。
扩充的转换函数f
设QK,函数f(Q, )=Q,即如果输入字符 是空串,则仍停留在原来的状态上。
对QK,T,t1*,f(Q,Tt1)=f(f(Q,T), t1) 该定义是一个递归定义,说明当自动机处 在状态Q且面临某个输入串Tt1时,则先应 用函数 f(Q,T)=P,然后应用函数f(P,t1)。
C
01 S0 S1 S5 0 S1 S2 S7 1 S2 S2 S5 1 S3 S5 S7 0 S5 S3 S1 0 S7 S0 S1 1
3.2.3 合并等价状态
等价状态
若s和t是M的两个不同状态,称s和t等 价:如果从状态s出发能读出某个字而停 于终态,同样从t 出发也能读出同一个字 而停于终态;反之若从t 出发能读出某个字 而停于终态,则从s出发也能读出同一个 字而停于终态。
个状态转换表,即把其中第一列中的元素 作为状态,把Ia ,Ib分别看作是输入符号a, b,把其余信息看作是状态转换函数之值。 这个表唯一地刻画了一个确定的有穷状态 自动机M,其初态是该表第一行第一列的 元素,其终态是该表中所有那些含有原终 态的元素。可以证明,这个DFA M和NFA M是等价的。
f(2,a)={2} f(4,b)={4} 可用状态图或矩阵表示:
输入字符
状态
a
0
{0,3}
b {0,1}
a,b 0a
b
3a
a,b 4
1
{2}
1
2
{2} {2}
b
3
{4}
2
4
{4} {4}
a,b
§3.2 NFA到DFA的转换
3.2.1 确定化——造表法
造表法是一种简单而有效的确定化方法。 定义:设NFA M=(Q, ∪{}, t, Q0, F),
(S,110101)= ((S,1),10101)= (A,10101)= ((A,1),0101)= (S,0101)= ((S,0),101)= (B,101)= ((B,1),01)= (C,01)= ((C,0),1)= (A,1)= S(接受)
(S,11101)= ((S,1),1101)= (A,1101)= ((A,1),101)= (S,101)= ((S,1),01)= (A,01)= ((A,0),1)= (C,1)= B(拒绝)