自动机(转)

自动机

自动机类型:有限自动机(finite automata,FA),下推自动机(push-down automata, PDA),线性界限自动机(linear-bounded automata)和图灵机(Turing machine)

有限自动机

确定性有限自动机

DFA(deterministic automata) M 是一个五元组

M=(Σ,Q,δ,q0,F)M=(Σ,Q,δ,q0,F)

其中,ΣΣ是输入符号的有穷集合,Q 是状态的有限集合,q0∈Qq0∈Q是初始状态,F 是终止状态集合,F⊆QF⊆Q,δδ 是 Q×ΣQ×Σ 到 Q(下一个状态)的映射,也称状态转移函数。

注:Q×ΣQ×Σ表示两个集合的直积,这里表示分别从两个集合中取任意元素的组成的有序对,生成有序对的集合。

DFA M 接受的语言,记作T(M):

T(M)={x|δ(q0,x)∈F}T(M)={x|δ(q0,x)∈F}

其中,x 表示一个句子,且 x∈Σ∗x∈Σ∗,我们扩展转移函数为,

δ^:Q×Σ∗→Qδ^:Q×Σ∗→Q

δ^(q,ϵ)=qδ^(q,ϵ)=q

δ^(q,xa)=δ^(δ(q,a),x)δ^(q,xa)=δ^(δ(q,a),x)

其中x′→xax′→xa为右线性正则文法产生式(应用到句子上的情况)

不确定性有限自动机

NFA(non-definite automata) M 是一个五元组

M=(Σ,Q,δ,q0,F)M=(Σ,Q,δ,q0,F)

其中,ΣΣ是输入符号的有穷集合,Q 是状态的有限集合,q0∈Qq0∈Q是初始状态,F 是终止状态集合,δδ是直积Q×ΣQ×Σ 到 Q的幂集的映射。集合的幂集是集合所有的子集(包括空集和自身)组成的集合,这个集合的元素个数为2|Q|=∑|Q|i=0(|Q|i)2|Q|=∑i=0|Q|(|Q|i)

NFA与DFA不同的是,DFA 的δ(q,a)δ(q,a)是一个确定的状态作为下一个状态,而NFA的δ(q,a)δ(q,a)是一个集合,其中任一状态都有可能作为下一状态,

δ:Q×Σ→P(Q)δ:Q×Σ→P(Q)

我们扩展转移函数如下,

δ^:Q×Σ∗→P(Q)δ^:Q×Σ∗→P(Q)

δ^(q,ϵ)=sδ^(q,ϵ)=s

δ^(q,xa)=⋃r∈δ(q,a)δ^(r,x)δ^(q,xa)=⋃r∈δ(q,a)δ^(r,x)

NFA M 接受的语言为,

T(M)={x|p∈δ(q0,x),p∈FT(M)={x|p∈δ(q0,x),p∈F

其中,x 表示一个句子

正则文法与FA

定理:若G=(VN,VT,P,S)G=(VN,VT,P,S)表示一个正则文法,则存在一个FAM=(Σ,Q,δ,q0,F)FAM=(Σ,Q,δ,q0,F),使得T(M)=L(G)T(M)=L(G)

其中,VNVN表示非终结符,VTVT表示终结符

于是可以由给定正则文法构造FA M,步骤如下:

  1. 令Σ=VT,Q=VN∪T,q0=SΣ=VT,Q=VN∪T,q0=S,其中 T 是新增的一个非终结符
  2. 如果P中存在产生式S→ϵS→ϵ,则 F={S,T}F={S,T},否则F={T}F={T}
  3. 如果P中存在产生式B→a,B∈VN,a∈VTB→a,B∈VN,a∈VT,则T∈δ(B,a)T∈δ(B,a)
  4. 如果P中存在产生式B→aC,B,C∈VN,a∈VTB→aC,B,C∈VN,a∈VT,则C∈δ(B,a)C∈δ(B,a)
  5. 对于每个a∈VTa∈VT,有δ(T,a)=∅δ(T,a)=∅

 上面这个步骤给出的太突然,初看可能会不太容易理解。

我们从给出的正则文法出发,根据上篇文章的介绍,正则文法的规则是(为了与上面步骤相一致,以右线性正则文法为例)A→x|xBA→x|xB,可见非终结符总是由一种或多种终结符的方幂连接而成,也就是说,非终结符是有终结符组成,所以正则文法所识别的句子最终都是由终结符组成,所以步骤(1)中,FA M的输入符号集就是Σ=VTΣ=VT,FA M的上个状态在某一输入符的条件下转换到下一状态,而这个输入符正是文法中的终结符x,正好对应文法规则的产生式A→xBA→xB,不难想到,这对应着FA M中状态转变,即状态 A 转换到 状态 B,而A 和 B 是文法中的非终结符,所以FA M的状态集合Q=VNQ=VN。不过,这样就OK了吗?显然没有,此时Q中的状态全部是VNVN中的非终结符,根据文法产生式,非终结符总是要继续推导下去的,这说明,Q中少了能表示终止的状态,否则就是要构造无限长度的句子了。我们新增一个非终结符T,这个非终结符T很特殊,它没有产生式,它的具体意义稍后就会解释。不过我们的Q 就完整了,于是Q=VN∪TQ=VN∪T。另外,FA M的起始状态则不难理解为是文法的起始符q0=Sq0=S。

接着看步骤3、4和5

右线性正则文法的产生式有:B→a,B∈VN,a∈VTB→a,B∈VN,a∈VT,表示一个非空终止符B 产生出一个终止符a,这个产生式的右端没有非终结符,根据这种产生式,对应于FA M则是由状态B 接收一个输入符a 后进入下一个状态,这个状态就是前面新引入的那个T,即,但凡应用了B→aB→a这种右端没有非终结符的产生式,FA M就进入下一个状态T,由状态B并接收一个输入符a进入下一个状态T,如果是NFA,则是下一个状态集合,这里为了不失一般性,我们考虑NFA(毕竟DFA是NFA的特例),即δ(B,a)δ(B,a)是下一个状态集合,那么如果经过产生式B→aB→a变换后,,FA M进入状态T,则 T∈δ(B,a)T∈δ(B,a)。

根据右线性正则文法,如果有产生式:B→aC,B,C∈VN,a∈VTB→aC,B,C∈VN,a∈VT,那么根据上面的阐述,应该知道应用了此产生式后,FA M进入下一个状态C,且C∈δ(B,a)C∈δ(B,a)。当然如果还有产生式B→aDB→aD,那么D∈δ(B,a)D∈δ(B,a);如果B 只有一个产生式B→aB→a,那么δ(B,a)δ(B,a)只有一个元素,δ(B,a)={T}δ(B,a)={T}

前面提到过,新引入的非终结符T没有产生式,没有T→a|aAT→a|aA这样的产生式,所以δ(T,a)=∅δ(T,a)=∅

然后来看步骤2,

FA M的终止状态集合F⊆QF⊆Q,显然集合Q里面只有状态T 可以作为终止状态,即应用了文法产生式B→aB→a之后进入状态T,所以F={T}F={T}。前面我们介绍文法时,没有引入ϵϵ,现在将其引入,这样就可以产生“空句子”,如果S→ϵS→ϵ,即产生一个 空句子 ,那么显然,使用起始状态 S 作为此时的终止状态,所以,如果有产生式S→ϵS→ϵ,此时F={S,T}F={S,T},而 S∈VNS∈VN,此时依然能保证F⊆QF⊆Q,当然如果没有产生式S→ϵS→ϵ,那么F={T}F={T},即只有非空句子的终止状态T

定理:若M=(Σ,Q,δ,q0,F)M=(Σ,Q,δ,q0,F)是一个有限自动机,则存在一个正则文法G=(VN,VT,P,S)G=(VN,VT,P,S),使得L(G)=T(M)L(G)=T(M)

由FA M构造G的步骤:

  1. 令VN=QVN=Q,VT=ΣVT=Σ,S=q0S=q0。根据前面的说明,这里应该不难理解
  2. 如果C∈δ(B,a),B,C∈Q,a∈ΣC∈δ(B,a),B,C∈Q,a∈Σ,则在P中存在产生式:B→aCB→aC。根据前面的说明,反过来就得到这条步骤
  3. 如果C∈δ(B,a),C∈FC∈δ(B,a),C∈F,则P中存在产生式B→aB→a。根据前面的说明,这里C 就是T

上下文无关文法与下推自动机

 下推自动机(Pushdown Automata, PDA)用于实现上下文无关文法(CFG)。PDA 可以表达成一个七元组:

M=(Σ,Q,Γ,δ,q0,Z0,F)M=(Σ,Q,Γ,δ,q0,Z0,F)

QQ: 状态的有限集合

ΣΣ: 输入符号集

ΓΓ: 栈符号表

δδ: 转移函数

q0q0: 初始状态

Z0Z0: 初始栈顶符号(也有叫栈底符号的,因为初始时栈里仅有这一个符号)

FF: 终止状态集或可接受状态集,F⊆QF⊆Q

 

δ:Qold state×Σ×input symb.Γ⇒stack topQ×new state(s)Γ∗new stack top(s)δ:Q×Σ×Γ⇒Q×Γ∗old stateinput symb.stack topnew state(s)new stack top(s)

δ(q,a,X)={(p,Y),...δ(q,a,X)={(p,Y),...

从状态q 转移到状态 p,a是下一个输入符号,X是当前栈顶符号,Y是下一个用于替换X的栈顶符号,如下图所示,Y∈Γ∗Y∈Γ∗,

(图来源网上)

  • 如果Y=ϵY=ϵ,直接将X从栈顶弹出
  • 如果Y=XY=X,栈顶符号不变还是X
  • 如果Y=Z1Z2...ZkY=Z1Z2...Zk,将X从栈顶弹出,然后将Y压入栈,按从右往左的顺序压入栈,此时Z1Z1位于栈顶

PDA类似NFA,比NFA多了一个stack,正是这个stack使得PDA可以识别一些非正则的语言。输入符号集与栈符号集可能会不同,所以分别用ΣΣ和ΓΓ表示。

转自:https://www.cnblogs.com/sjjsxl/p/7117412.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值