非确定有限状态自动机

title: 直观介绍.
content: NFA同DFA一样,消耗输入符号的字符串。对每个输入符号它变换到一个新状态直到所有输入符号到被耗尽。  不像DFA,非确定意味着对于任何输入符号,它的下一个状态不是唯一确定的,可以是多个可能状态中的任何一个。因此在形式定义中,一般都谈论状态幂集的子集:转移函数不提供一个单一状态,而是提供所有可能状态的某个子集。  一种扩展的NFA是NFA-λ(也叫做NFA-ε或有ε移动的NFA),它允许到新状态的变换不消耗任何输入符号。例如,如果它处于状态1,下一个输入符号是"a",它可以移动到状态2而不消耗任何输入符号,因此就有了歧义:在消耗字母"a"之前系统是处于状态1还是状态2呢?由于这种歧义性,可以更加方便的谈论系统可以处在的可能状态的集合。因此在消耗字母"a"之前,NFA-ε可以处于集合{1,2}内的状态中的任何一个。等价的说,你可以想象这个NFA同时处于状态1和状态2:这给出了对幂集构造的非正式提示:等价于这个NFA的DFA被定义为此时处于状态"q"={1,2}中。不消耗输入符号的到新状态的变换叫做λ转移或ε转移。它们通常标记着希腊字母λ或ε。  接受输入的概念类似于DFA。当最后的输入字符被消耗的时候,NFA接受这个字符串,当且仅当有某个转移集合把它带到一个接受状态。等价的说,它拒绝这个字符串,如果不管应用什么转移,它都不能结束于接受状态。
title: 形式定义.
content: 通常定义两种类似类型的NFA: NFA和“有ε-移动的NFA”。普通的NFA被定义为5-元组("Q", Σ, "T", "q", "F"),它构成自  这里的"P"("Q")指示"Q"的幂集。“有ε-移动的NFA”(有时也叫做“NFA-ε”或“NFA-λ”)修订转移函数为允许空串ε作为可能的输入,结果为  可以证明普通NFA和有ε移动的NFA是等价的,给定任何一个都可以构造出识别同样语言的另一个。
title: 性质.
content: 机器开始于任意初始状态并读取来自它的符号表的符号的字符串。自动机使用状态转移函数"T"来使用当前状态,和刚读入的符号或空串来确定下一个状态。但是,“NFA的下一个状态不只依赖于当前输入事件,还依赖于任意数目的后续输入事件。直到这些后续事件出现才有可能确定这个机器所处的状态” 。如果在自动机完成读取的时候,它处于接受状态,则称NFA接受了这个字符串,否则称为它拒绝了这个字符串。  NFA接受的所有字符串的集合是NFA接受的语言。这个语言是正则语言。  对于所有NFA都可以找到接受同样语言的一个确定有限状态自动机(DFA)。所以出于实现(可能)更简单的机器的目的把现存的NFA转换成DFA是可行的。这是使用幂集构造进行的,这可能导致在必需状态的数目上的指数增长。幂集构造的形式证明在这里给出。  对于有状态的可数无限集合的非确定有限自动机,幂集构造给出有状态的连续统的确定自动机因为可数无限集合的幂集是连续统:formula_1)。在这种情况下,为了使状态转移有意义,状态的集合必须被赋予一个拓扑。这种系统叫做拓扑自动机。
title: NFA-ε的性质.
content: 对于所有formula_2,写formula_3当且仅当从formula_4沿着零或更多个formula_5箭头前进可到达formula_6。换句话说,formula_3当且仅当存在formula_8这里的formula_9使得  对于任何formula_11,从"p"可到达的状态的集合叫做"p"的ε-闭包,并写为  对于formula_13的任何子集,定义"P"的ε-闭包为  ε-转移是传递的,这可以证明,对于所有formula_15和formula_13,如果formula_17且formula_18,则formula_19。  类似的,如果formula_20且formula_18则formula_22  设"x"是字母表Σ上的字符串。一个NFA-ε "M"接受字符串"x",如果存在"x"的形如"xx... x"的表示,这里的"x" ∈(Σ ∪{ε}),和状态序列 "p,p,..., p"二者,这里的"p" ∈ "Q",满足下列条件:  特别注意某些字母"x"可以是{ε};它们不是选择自单独的Σ,而是来自Σ ∪{ε}。
title: 实现.
content: 有多种方式实现NFA:
title: 例子.
content: 下面的例子展示一个NFA "M",带有二进制字母表,它确定输入是否包含偶数个0或偶数个1。设"M" =("Q", Σ, "T", "s", "F")这里的  "M"的状态图是:  "M"可以被看作两个DFA的并集:一个有状态{"S", "S"}而另一个有状态{"S", "S"}。  "M"的语言可以描述为如下正则表达式给出的正则语言:
title: NFA与DFA.
content: NFA与确定有限自动机(DFA,或简称FA)的辨识能力是一样的,因而两者是等价的。每个FA也可以写成NFA的形式,只要把转换函式由formula_28改写成formula_29就可以,即是与之等价的NFA的转换函数的输出结果即是FA的转换函数的输出结果的单元集。反之,对任何NFA "M"=("Q", Σ, δ, "q", "F")来说,如果它可以接受语言L,则必定存在某个FA "M"=("Q", Σ, δ, "q", "F"),也可以接受L。可以从「状态」的定义下手「消除」NFA的不确定性。NFA的转换函数的输出结果本为状态集合"Q"的子集合,现在把这一个子集合当成一个状态看待,即是FA "M"中的状态是NFA中状态集合的子集合。这技巧叫做子集合的建构(subset construction)。即是  formula_30  formula_31
title: NFA-ε的应用.
content: NFA和DFA是等价的,如果一个语言可被一个NFA识别,则它也可以被一个DFA识别,反之亦然。这种等价性的建立是重要和有用的。有用是因为构造识别给定语言的NFA有时比构造这个语言的DFA要容易很多。重要是因为NFA可以用来减少建立计算理论中很多重要性质的数学工作的复杂性。例如,使用NFA比使用DFA证明下列性质要更加容易:  (i)两个正则语言的并集是正则的。  (ii)两个正则语言的串接是正则的。  (iii)一个正则语言的Kleene闭包是正则的。

Summary: 在计算理论中,非确定有限状态自动机或非确定有限自动机(NFA)是对每个状态和输入符号对可以有多个可能的下一个状态的有限状态自动机。这区别于确定有限状态自动机(DFA),它的下一个可能状态是唯一确定的。尽管DFA和NFA有不同的定义,在形式理论中可以证明它们是等价的;就是说,对于任何给定NFA,都可以构造一个等价的DFA,反之亦然:通过使用幂集构造。两种类型的自动机只识别正则语言。非确定有限自动机有时被称为有限类型的子移位(subshift)。非确定有限状态自动机可推广为概率自动机,它为每个状态转移指派概率。

Nondeterministic finite automaton: In automata theory, a finite-state machine is called a deterministic finite automaton (DFA), if A nondeterministic finite automaton (NFA), or nondeterministic finite-state machine, does not need to obey these restrictions. In particular, every DFA is also an NFA. Sometimes the term NFA is used in a narrower sense, referring to an NFA that is "not" a DFA, but not in this article.