我从您的示例开始,以便大家发现它有帮助
任何class of automata 都可以有两种形式:
在确定性模型中:我们只有一个选择(或说没有选择)从一个congratulation 移动到下一个configuration。
在Finite Automate (DFA) 的确定性模型中:对于状态 (Q) 和语言符号 (Σ) 的每个可能组合,我们总是有唯一的下一个状态。
Definition of transition function for DFA: δ:Q×Σ → Q
δ(q0, a) → q1
^ only single choice
因此,在 DFA 中,每个可能的移动都是确定从一个状态到下一个状态。
鉴于,
在非确定性模型中:对于下一个配置,我们可以有多个选择。
并且在有限自动机 (NFA) 的非确定性模型中:输出是状态 (Q) 和语言符号的 一些 组合的 set 状态(Σ)。
NFA的转移函数定义:δ:Q×Σ → 2Q = ⊆ Q
δ(q0, a) → {q1, q2, q3}
^ is set, Not single state (more than one choice)
在 NFA 中,对于下一个状态,我们可以有多个选择。这就是你所说的过渡 NFA 中的歧义。
(你的例子)
假设语言符号为Σ = {a, b},语言/正则表达式为(a + b)*ab。您认为这种语言的有限自动机可能如下所示:
您的问题是:Which state to move when we have more than one choices for next state?
我提出了更笼统的问题。
NFA 中如何处理字符串?
我正在考虑将 自动机模型作为接受器,如果它属于自动机语言,则接受字符串。(注意:我们可以将自动机作为传感器 em>),下面是我对上述示例的回答
在上面的 NFA 中,我们找到了 5 个 Tapular 对象:
1. Σ : {a, b}
2. Q : {q1, ,q2, q3}
3. q1: initial state
4. F : {q3} <---F is set of final state
5. δ : Transition rules in above diagram:
δ(q1, a) → { q1, q2 }
δ(q1, b) → { q1 }
δ(q2, b) → { q3 }
示例的有限自动机实际上是一个 NFA,因为在生产规则 δ(q1, a) → { q1, q2 } 中,如果我们在当前状态为 q1 时得到 a 符号,那么下一个状态可以是 q1 或 q2(超过一种选择)。因此,当我们在 NFA 中处理一个字符串时,我们会获得额外的路径,无论它们是符号 a 要处理,而当前状态是 q1。
一个字符串被 NFA 接受,如果有一些可能的移动序列将使机器在字符串处理结束时进入最终状态。而所有从初始状态到集合F中的任何最终状态的字符串集合称为NFA语言:
我们也可以写,“NFA 定义的语言是什么?”如:
L(nfa) = { w ⊆ Σ* | δ*(q1, w) ∩ F ≠ ∅}
当我是新手时,这对我来说太复杂了,无法理解,但事实并非如此
L(nfa) 说:所有字符串由语言符号组成 = (w ⊆ Σ* ) 在语言中;如果(|) 处理w 后得到的状态集合形成初始状态 (=δ*(q1, w) ) 包含最终状态集合中的一些状态(因此与最终状态的交集不为空 = δ*( q1, w) ∩ F ≠ ∅)。因此,在处理 Σ* 中的字符串时,我们需要跟踪所有可能的路径。
Example-1:处理字符串abab虽然在NFS之上:
--►(q1)---a---►(q1)---b---►(q1)---a---►(q1)---b---►(q1)
\ \
a a
\ \
▼ ▼
(q2) (q2)---b---►((q3))
|
b
|
▼
(q3)
|
a
|
halt
上图显示:如何在NFA中处理字符串abab?
A halt: 表示字符串无法完全处理,因此不能将其视为此路径中接受的字符串
字符串abab 可以在两个方向上完全处理,因此 δ*(q1, w) = { q1, q3}。
δ*(q1, w) 与一组最终状态的交集是{q3}:
{q1, q3} ∩ F
==> {q1, q3} ∩ {q3}
==> {q3} ≠ ∅
这样,字符串ababa 是语言L(nfa)。
Example-2: Σ* 中的字符串为abba,处理方法如下:
--►(q1)---a---►(q1)---b---►(q1)---b---►(q1)---a---►(q1)
\ \
a a
\ \
▼ ▼
(q2) (q2)
|
b
|
▼
(q3)
|
b
|
halt
对于字符串abba,可达状态的集合是 δ*(q1, w) = { q1, q2},并且在这个集合中没有状态是最终状态,这意味着 => 它与 F 的交集是∅一个空集,因此string abba 不是可接受的字符串(并且不是语言)。
这是我们在非确定性有限自动机中处理字符串的方式。
一些额外的重要说明:
在有限自动机的情况下,确定性和非确定性模型具有同等的能力。非确定性模型没有额外的能力来定义一种语言。
因此 NFA 和 DFA 的范围与正则语言相同。 (并非所有自动化类别都属于这种情况,例如 PDA 的范围!=NPDA)
非确定性模型对于理论目的更有用,比较适合绘制。而出于实现目的,我们总是需要确定性模型(为了效率而最小化)。幸运的是,在有限自动元类中,每个非确定性模型都可以转换为等效的确定性模型。我们有算法方法convert an NFA into DFA。
在 DFA 中由单个状态表示的信息可以由 NFA 状态的组合表示,因此 NFA 中的状态数少于其等效 DFA。 (有可用的证明 numberOfStates(DFA))
上述正则语言的DFA如下:
使用此 DFA,您将始终为 Σ* 中的任何字符串找到从初始状态到最终状态的唯一路径,而不是设置,您将获得一个可到达的最终状态,如果该状态属于输入字符串的最终集合据说是接受的字符串(用语言),否则不是/
(您的表达式.*ab 和(a + b)*ab 通常在理论科学中是相同的,我们不使用. 点运算符而不是连接)