正则表达式 – 转换中的歧义:如何在NFA中处理字符串?
我从给定的正则表达式中创建了DFA以匹配测试字符串.在某些情况下会发生.*. (例如.* ab).现在假设机器处于状态1.在DFA中,.*指的是所有字符到自身的转换,以及从状态1到’a’的另一个转换.如果测试字符串包含’a’那么可能是转换,因为从状态1开始,机器可以转到DFA中不可能的两种状态.
我从你的例子的基础开始,以便人们可以发现它有用
任何 class of automata都可以有两种形式: >确定性 在确定性模型中:我们只有一个选择(或者说没有选择)从一个congratulation移动到下一个configuration. Definition of transition function for DFA: δ:Q×Σ → Q δ(q0,a) → q1 ^ only single choice 因此,在DFA中,从一个状态到下一个状态,每个可能的移动都是明确的. 然而, NFA的转移函数的定义:δ:Q×Σ→2Q =?Q δ(q0,a) → {q1,q2,q3} ^ is set,Not single state (more than one choice) 在NFA中,我们可以为下一个州提供多个选择.那就是你在过渡NFA中所谓的歧义. (你的例子)
如何在NFA中处理字符串? 我正在考虑将自动机模型作为接受器,如果它属于自动机语言,则接受字符串.(注意:我们可以将自动机作为换能器),下面是我的回答以上示例 在上面的NFA中,我们找到了5个tapular对象: 1. Σ : {a,b} 2. Q : {q1,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,那么下一个状态可以是q1或q2(多个选择) ).因此,当我们在NFA中处理字符串时,我们会获得额外的路径,只要它们是一个符号a进行处理,而当前状态为q1. 如果存在一些可能的移动序列,则会在字符串处理结束时将机器置于最终状态,NFA接受字符串.并且所有字符串的集合都有一些路径可以从初始状态到达集合F中的任何最终状态,称为NFA的语言: 我们也可以写一下,“NFA定义的语言是什么?”如:
当我是新人时,这对我来说太复杂了,但实际上并非如此 L(nfa)说:所有字符串都由语言符号组成=(w?Σ*)是用语言表达的; if(|)在处理w形式初始状态(=δ*(q1,w))后得到的状态集包含最终状态集中的一些状态(因此与最终状态的交集不为空=δ*(q1,w)∩F≠?).因此,在处理Σ*中的字符串时,我们需要跟踪所有可能的路径. 示例1:在NFS上面处理字符串abab: --?(q1)---a---?(q1)---b---?(q1)---a---?(q1)---b---?(q1) a a ▼ ▼ (q2) (q2)---b---?((q3)) | b | ▼ (q3) | a | halt 上图显示:如何在NFA中处理字符串abab? 停止:表示字符串无法完全处理,因此不能将此路径中的字符串视为已接受的字符串 字符串abab可以在两个方向上完全处理,因此δ*(q1,w)= {q1,q3}. δ*(q1,w)与最终状态集的交集为{q3}: {q1,q3} ∩ F ==> {q1,q3} ∩ {q3} ==> {q3} ≠ ? 这样,字符串ababa就是语言L(nfa). 示例2:来自Σ*的字符串是abba,以下是如何处理: --?(q1)---a---?(q1)---b---?(q1)---b---?(q1)---a---?(q1) a a ▼ ▼ (q2) (q2) | b | ▼ (q3) | b | halt 对于字符串abba,可达状态的集合是δ*(q1,q2}并且在该集合中没有状态是最终状态,这意味着=>它与F的交集是一个空集,因此字符串abba不是一个可接受的字符串(而不是语言). 这是我们在非确定性有限自动机中处理字符串的方式. 一些额外的重要说明: >在有限自动机的情况下,确定性和非确定性模型同样有能力.非确定性模型没有额外的定义语言的能力. 使用此DFA,您将总是找到从Σ*中的任何字符串的初始状态到最终状态的唯一路径,而不是设置,您将获得单个可达到的最终状态,如果该状态属于最终设置,则输入字符串被称为被接受的字符串(用语言)否则不被/ (你的表达.* ab和(a b)* ab通常在我们不使用的理论科学中相同.点运算符,然后连接) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- flash player完全屏蔽右键菜单方法
- PostgreSQL 查询优化--CTE使用
- C# 实现ping功能
- React-Native 开发 android & ios App,共享一份代码
- c – 为什么std :: move采用forward_reference而不是lvaue引
- 深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
- 【转载】TexturePacker 如何使用自带的加密功能及在cocos2d
- 使用xml及java代码混合的方式来设置图形界面
- 正则表达式javascript小demo以及笔记
- xml格式的word换行标记<w:br/>