当前位置:文档之家› 第二章+(4)非确定有限自动机NFA

第二章+(4)非确定有限自动机NFA


{4,5,7,6,2} *
{3,8}
{9}
{9,3,8} *
{9}
{9} *
{9,3,8}
输入字
状态
{1,12} {4,5,72,6,2}*
{33,8} {9,43,8}*
{95} *
a
{4,5,27,6,2}
{59} {95}
b
{33,8} {9,43,8}
a
1
b
b
2
3
4a
5
a
例2:将如下的NFA转化为DFA
例: _CLOSURE({1})={1,2}

6
b
a
ε
1ε 2
b
ε
a
3
8
9
a
b
ε
4
7
㈡ 状态集I的a转换
若I={S1, … , Sm }是NFA的状态集的一个子集(状态 子集),a, 则定义: Ia = _CLOSURE(J )
其中:
J = f (S1,a) f (S2,a)… f(Sm,a)
定义1’ 对DFA中的两个状态q1和q2 ,如果将它们 看作是初始状态,所接受的符号串相同,则定义 q1和q2是等价的。
注意: DFA的终止状态和非终止状态不是等价的。
无关状态 从有限自动机的初始状态开始,任何输入序列都 不能到达的那些状态称为无关状态。
最小的DFA(化简了的DFA) 如果DFA M 没有无关状态,也没有彼此等价的 状态,则称DFA M 是最小的(或规约的)。
复习
一.确定有限自动机 确定有限自动机M为一个五元组:
M = ( S , , s0 ,f ,Z ),其中: S:是一个有穷状态集,它的每个元素称为一个状态; :是一个有穷字母表,它的每个元素称为一个输入
字符; s0S:是唯一的一个初始状态(开始状态); F:是状态转换函数:S S,且单值函数; ZS:是终止状态集(可接受状态集、结束状态集)。
{4,5,7,6,2}a = _CLOSURE(Φ) =Φ
{4,5,7,6,2}b = _CLOSURE({9,3}) = {9,3,8}
{3.8}a = _CLOSURE({9}) = {9}
{3.8}b = _CLOSURE(Φ) =Φ
输入字 状态
{1,2}
a
{4,5,7,6,2}
b
{3,8}
case ‘ a’ : goto L0; case ‘b’ : goto L0; default : Error( );
}
2.3.3 NFA到DFA的转换
定义2.26 有限自动机的等价 对于给定的有限自动机M1和M2,如果有 L(M1) =
L(M2),则称有限自动机M1和M2等价。 定理2.5 对于每一个非确定有限自动机M,存在一个确
若DFA M的初始状态同时又是终止状态,则空字符 串可为DFA M所接受(识别)。
DFA M 所能接受的字符串的全体记为L(M).
状态转换矩阵:用二维数组描述DFA
DFA M=( {S,U,V,Q}, {a,b}, f, S, {Q}),其中
f 定义为:
f ( S, a )=U
f ( V, a )=U
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,2}a =_CLOSURE(J ) J=f(1,a) f(2,a)={4,5} {1,2}a =_CLOSURE({4,5} )={4,5,7,6,2}

6
b
a
ε
1ε 2
b
ε
a
3
8
9
a
b
ε
4
7
* NFA A‘到DFA A的转换过程(确定化):
1.令I0= _CLOSURE(S0 )作为DFA的初始状态,其中S0 为NFA 初始状态集。
}
2.终止状态对应的switch语句
a
j
Li: seitch ( CurrentChar )
i
{ case ‘ a’ : goto Lj;
b
k
case ‘b’ : goto Lk;
case ‘Eof’ : Accept;
default : Error( );
}
例:
a 0a a
b
a, b
1
2
L0: switch ( CurrentChar ) { case ‘ a’ : goto L1;
f ( V, b )=Q
f ( U, a )=Q
f ( Q, a )=Q
f ( U, b )=V
f ( Q, b )=Q
a
U
a a ,b
Sb
aQ
b
V
b 状态转换图
DFA接受的字符串
对于*中的任何字符串t,若存在一条从初始结点到 某一终止结点的路径,且这条路上所有弧上的标记 符连接成的字符串等于t,则称t可为DFA M所接受 (识别)。
例题
例1:将如下的NFA转化为DFA。

6
b
a
ε
1ε 2
b
ε
a
3

7
转化的结果如下:
26
b
64
a a
1 b
3
95 a
转化过程:
5 ε 66
b
a
ε
_CLOSURE(S0 ) = _CLOSURE({1} )
={1,2}
({1,2})a = _CLOSURE({4,5} )
={4,5,7,6,2}
{5,1,4, 6,y} {5,1,3, 6,y}
{5,1,3, 6,y} {5,1,3,2,6,y}
b
b
{5,1,4} {5,1,4} {5,1,4,2,6,y} {5,1,4, 6,y} {5,1,4,2,6,y} {5,1,4,2,6,y} {5,1,4, 6,y}
包含原终 态的状态 作为新的 终态
1
a
2b
3
c
4
d
b
c
5
6
7
a 1
2b
3c
4
d
b
c
5
6
7
a 1
2b
3c
4
d
b
c
5
6
7
a 1
2b
3c
4
d
b
c
5
6
7
a 1
2b
3c
4
d
b
c
5
6
7
1
a
2
b 3
c
4
b
c
d
5
6
7
1
a
2
b 3
c
4
d
等价状态
定义1 设DFA M 的两个状态q1和q2 , 如果对任意输 入的符号串x,从q1和q2出发,总是同时到达接 受状态或拒绝状态中,则称q1和q2是等价的。如 果q1和q2不等价,则称q1和q2是可区分的。
a
{x,5,1} 1 {5,1,3} 2 {5,1,4} 3 {5,1,3,2,6,y} 4* {5,1,4,2,6,y} 5 * {5,1,4, 6,y} 6 * {5,1,3, 6,y} 7 *
{5,1,3} 2 {5,1,3,2,6,y}4 *
{5,1,3}2 {5,1,3,2,6,y}4
{5,1,3, 6,y} 7 * {5,1,3, 6,y} 7 * {5,1,3,2,6,y} 4 *

a
23



01

6
a 7
b 8
9 b 10

b 45

例2:将如下的NFA转化为DFA
a
a
ε
ε
x
5
1
a
3
a

6
ε y
{5,1,4}a ε={-5c{l,51o,,s34u,}1rb}e({x}) =={{x5,5,4,1,2},1,6,y} {5,1,3,2,6,y}a {=x{,55,,31,}2a,6,1, y} ={5{,51,,33,,12},6,y}b ={5,4, 6,1, y}
定有限自动机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)。
状态分离法
状态分离法
状态分离法的目标:
SS = SS1∪SS2∪……∪SSn 其中: SSi∩ SSj=Φ (i ≠ j时),并且每个SSi中的所有状态 均等价。
状态集SSi对a(a∈Σ)是不可区分的:
若SSi中元素对输入符a都转到相同的状态集中.
状态集SSi对a(a∈Σ)是可区分的:
子集的映射,即S× (∪{}) → 2s ; Z: Z S ,是终止状态集。
三.DFA的两种表示方式
状态转换图 :用有向图表示自动机
DFA M=( {S,U,V,Q}, {a,b}, f, S, {Q}),其中 f 定义为:
相关主题