不确定性有限自动机

对比确定性有限自动机(DFA)

DFA:当给定了当前所在状态,在遇到一个字符之后,我们就可以确定要向哪一个状态转移。打个比方,就是在我们当前位置没有岔路口,没有给我们多选的机会。
NFA:NFA即不确定性有限自动机(nondeterminism finite automaton),它允许我们在遇到一个状态时可以有多条转移路径可以选择。特殊的是,它允许我们不读入任何字符就进行状态转移(此操作称为 ϵmove ϵ − m o v e )。
能力: 令人惊讶的是,DFA和NFA的能力相同。也就是说,DFA和NFA都只能识别正则语言。所以,现在一种语言是正则的当且仅当它可以被某个DFA或NFA识别。此结论在之后的文章中将会证明。

NFA的正式定义

NFA的正式定义和DFA差不多,但是因为NFA可以同时向多个状态转移,所以它的转移函数的值域应该是状态集 Q Q 幂集(一个幂集是这个集合的所有子集的集合),记作P(Q)。除此之外,由于NFA还有 ϵmove ϵ − m o v e ,所以它的转移函数应该是 Q×ϵP(Q) Q × ∑ ϵ → P ( Q ) ,其中 ϵ={ϵ} ∑ ϵ = ∑ ∪ { ϵ } 。因此我们可以继续用5元组 (Q,,δ,q0,F) ( Q , ∑ , δ , q 0 , F ) 定义NFA。
1. Q Q 是有限状态集。
2. 是有限字符表。
3. δ δ 是转移函数: Q×ϵP(Q) Q × ∑ ϵ → P ( Q )
4. q0 q 0 是开始状态,它是 Q Q 中的元素。
5. F是接受状态集合, 它是 Q Q 的子集。

例子

NFA样例图
对于N1=(Q,,δ,q1,F),其中
1. Q={ q1,q2,q3,q4} Q = {   q 1 , q 2 , q 3 , q 4 }
2. ={ 0,1} ∑ = {   0 , 1 }
3. δ δ 是:

q1q2q3q40{q1}{q3}{q4}1{ q1,q2}{q4}{q4}ϵ{q3} 0 1 ϵ q 1 { q 1 } {   q 1 , q 2 } ∅ q 2 { q 3 } ∅ { q 3 } q 3 ∅ { q 4 } ∅ q 4 { q 4 } { q 4 } ∅ ,

4. q1 q 1 是开始状态,
5. F={q4} F = { q 4 }

某个NFA N N accepts字符串w的定义

我们假定 N=(Q,,δ,q0,F) N = ( Q , ∑ , δ , q 0 , F ) , w=y1y2...ym w = y 1 y 2 . . . y m ,其中 yiϵ y i ∈ ∑ ϵ ,如果存在一序列状态 r0,r1,...,rmQ r 0 , r 1 , . . . , r m ∈ Q 使得以下3个条件成立,骂我们就说 Nacceptsw N a c c e p t s w :
1. r0=q0 r 0 = q 0 ,
2. ri+1δ(ri,yi+1),i=0,...,m1 r i + 1 ∈ δ ( r i , y i + 1 ) , 其 中 i = 0 , . . . , m − 1 ,
3. rmF r m ∈ F

解释:上述第一个条件是指明NFA从开始状态出发;条件二表示当机器处于状态 ri r i 时,它读到 w w 中的字符时是可以转移到下一个状态的;条件三表明最后的转移状态rm要属于接受集合。

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页