2.3 正则表达式

用正则运算符构造描述语言的表达式,称为正则表达式。

  • 正则表达式的值是一个语言。
  • 连接符常常被省略。
  • 在正则表达式中,先做星号运算,然后做连接运算,最后做并运算。除非用括号来改变顺序。

注意:不要混淆了正则表达式ε\varepsilonε与ϕ\phiϕ。表达式ε\varepsilonε表示只包含一个字符串ε\varepsilonε的语言,而ϕ\phiϕ表示不包含任何字符串的语言。

举几个典型的例子:
0∗10∗=0^* 10^* =0∗10∗= {w∣ww\mid ww∣w恰好有一个1}
Σ∗1Σ∗=\Sigma^* 1\Sigma^*=Σ∗1Σ∗= {w∣ww\mid ww∣w至少有一个1}
(ΣΣ)∗=(\Sigma\Sigma)^*=(ΣΣ)∗= {w∣ww\mid ww∣w是偶数长度的字符串}
(0∪ε)1∗=(0\cup \varepsilon)1^* =(0∪ε)1∗= {01,1001,1001,10}
1∗ϕ=ϕ1^* \phi=\phi1∗ϕ=ϕ 空集与任何集合连接得空集
ϕ∗=\phi^*=ϕ∗= {ε\varepsilonε}

2.3.2 与有穷自动机的等价性
定理 2.28 一个语言是正则的,当且仅当可以用正则表达式描述它。
引理 2.28 如果一个语言可以用正则表达式描述,则它是正则的。

将正则表达式转换成一台NFA。(这里要自己会画图转换哦,只要清楚规则,很简单的。具体步骤可以看P41-P42)
注:这种过程的转换一般不能给出状态最少的NFA。

引理 2.32 如果一个语言是正则的,则它可以用正则表达式描述。

由于AAA是正则的,故它被一台DFADFADFA接受。证明过程需要分为2个部分。一是,把DFADFADFA转换成为GNFAGNFAGNFA;二是,如何把GNFAGNFAGNFA转换成正则表达式。
1)广义非确定型有穷自动机就是非确定型有穷自动机,只是转移箭头可以用任何正则表达式作标号,而不是只能用字母表的成员或ε\varepsilonε作标号。
2)GNFAGNFAGNFA读输入符号段,而不是像NFANFANFA一次只能读一个符号。
3)GNFAGNFAGNFA是非确定性的,可能有几种不同的方式处理同一个输入串。如果它的处理能够使得GNFAGNFAGNFA在输入结束处进入一个接受状态,则接受它的输入。

GNFAGNFAGNFA
  • 起始状态有射到其他每一个状态的箭头,但是没有从任何其他状态射入的箭头。
  • 有唯一的一个接受状态,并且它有从其他每一个状态射入的箭头,但是没有射到任何其他状态的箭头。并且,这个接受状态与起始状态不同。
  • 除起始状态和接受状态之外,每一个状态到自身和其他每一个状态都有一个箭头。
将DFADFADFA转化为GNFAGNFAGNFA
  • 首先,添加一个新的起始状态和一个接受状态,从新起始状态到老起始状态添加一个有ε\varepsilonε的箭头,从每一个老接受状态到新接受状态添加一个有ε\varepsilonε的箭头。
  • 其次,如果两个状态之间有多个方向相同的箭头,则把它替换成一个标记着原先标记的并集的箭头。
  • 最后,在没有箭头的状态之间添加标记ϕ\phiϕ的箭头。
将GNFAGNFAGNFA转化为正则表达式
  • 设这台GNFAGNFAGNFA有kkk个状态,由于GNFAGNFAGNFA必须有一个起始状态和接受状态,并且这两个状态不同,所以k≥2k\geq 2k≥2。
  • 如果k>2k> 2k>2,则构造一台有k−1k-1k−1个状态的等价的GNFAGNFAGNFA。重复这个步骤,直到只含有两个状态时为止。这个过程称为CONVERT(G)CONVERT(G)CONVERT(G)
  • 当k=2k=2k=2时,箭头的标记就是等价的正则表达式。

注意⚠️:删去每一个中间状态时,要改动每一个留下来的箭头上标记的正则表达式。新标记要表示两状态间的正则表达式以及通过删去的中间状态到达目标状态的正则表达式。(防粗心的小技巧:通过中间状态的那条“路”内使用「连接」,与本来没有中间状态的那条“路”之间使用「并」。)

2.33 广义非确定型有穷自动机

广义非确定型有穷自动机GGG是一个5元组(Q,Σ,δ,qstart,qaccept)(Q,\Sigma,\delta,q_{start},q_{accept})(Q,Σ,δ,qstart​,qaccept​),其中
1)QQQ是一个有穷的状态集。
2)Σ\SigmaΣ是字母集。
3)δ\deltaδ:(Q−qaccept)×(Q−qstart)→R(Q-{q_{accept}})\times(Q-{q_{start}})\rightarrow R(Q−qaccept​)×(Q−qstart​)→R是转移函数(使用转移函数定义动作规则)。
4)qstartq_{start}qstart​是起始状态。
5)qacceptq_{accept}qaccept​是接受状态。

断言 2.34 对于任意的GNFAGNFAGNFA,CONVERT(G)CONVERT(G)CONVERT(G)等价于GGG。

(用数学归纳法来证明,假设断言对k−1k-1k−1个状态为真,证明对于kkk个状态断言为真。)

通过上述算法将DFADFADFA转化为正则表达式,可以参考书上P46的两个例子。理解了上面的算法再看具体实例,就一目了然啦~加油!

2.4 非正则语言

这一节主要证明某些语言不是正则的。

注意⚠️:看起来需要无穷的存储并不意味着一定需要无穷的存储。比如:在字母表Σ=0,1\Sigma={0,1}Σ=0,1上的语言:D=D=D={w∣ww\mid ww∣w中01和10作为子串出现的次数相同},是正则的。

关于正则语言的泵引理
  • 性质:语言中的所有字符串只要它的长度不小于某个特定的值–泵长度,就可以被“抽取“。即将这段子串重复任意次的子串仍在这个语言中。
  • 如果能够证明一个语言没有这个性质,则保证它不是正则的。
定理2.37 泵引理

设AAA是一个正则语言,则存在一个数ppp(泵长度)使得,如果sss是AAA中任一长度不小于ppp的字符串,那么sss可以被分为3段,s=xyzs=xyzs=xyz,满足下述条件:

1)对每一个i≥0i\geq 0i≥0,xyiz∈Axy^iz \in Axyiz∈A
2)∣y∣>0|y|>0∣y∣>0
3)∣xy∣≤p|xy|\leq p∣xy∣≤p
其中,∣y∣|y|∣y∣指的字符串长度,yiy^iyi是iii个yyy相连接,y0y^0y0等于ε\varepsilonε。

关于泵引理,可以参考我之前的一篇文章:https://mp.weixin.qq.com/s/qt03G2s-l5nWB7mRcysqNw

为了用泵引理证明某个语言B不是正则的:
  • 首先假设BBB是正则的,以便得出矛盾。
  • 其次在BBB中寻找一个字符串sss,它的长度大于等于ppp。
  • 最后,证明sss不能被抽取。(需要考虑把sss划分成xxx、yyy和zzz的所有方式,找到一个iii值使得xyiz∉Bxy^iz \notin Bxyiz∈/​B)

具体实例可以参考书P49-P51

在这里,我举一个例子。
例 2.39 设C=C=C={w∣ww\mid ww∣w中000和111的个数相同},用泵引理证明CCC不是正则的。
证明:采用反证法。假设CCC是正则的。令ppp是泵引理给出的泵长度。取sss是字符串0p1p0^p1^p0p1p。由于sss是CCC的一个成员且长度大于ppp,泵引理保证sss可以被分为3段,s=xyzs=xyzs=xyz,使得对任意i≥0i\geq 0i≥0,字符串xyizxy^izxyiz在CCC中。我们想证明这个结果是不可能的。
因为必须保证∣xy∣≤p|xy|\leq p∣xy∣≤p,所以yyy一定只由0组成,从而xyyz∉Cxyyz \notin Cxyyz∈/​C。因此s不可能被抽取。

例 2.40 令F=F=F={ww∣w∈0,1∗ww\mid w \in{0,1}^*ww∣w∈0,1∗} 用泵引理说明FFF是非正则的。

证明:假设FFF是正则的。令ppp是泵引理给出的泵长度。设sss是字符串0p10p10^p10^p10p10p1。因为sss是FFF的一个成员,并且sss的长度大于ppp,故泵引理保证sss可以被分为3段,s=xyzs=xyzs=xyz,满足引理中的三个条件。要证明这个结果是不可能的。
因为yyy一定仅由000组成,故 xyyz∉Fxyyz \notin Fxyyz∈/​F。

注意⚠️:在选取sss的时候要非常小心,因为有些是能被抽取的,有些是不能抽取的。我们必须把不能抽取的找出来才能推翻它是正则的。只要存在不能被抽取的字符串,就说明它是非正则的。

计算理论导论|正则语言(下)正则表达式、泵引理相关推荐

  1. 【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )

    文章目录 一.推广型的非确定性有限自动机 ( GNFA ) 引入 二.推广型的非确定性有限自动机 ( GNFA ) 删除状态 三.确定性有限自动机 ( DFA ) 转为 正则表达式 四.确定性有限自动 ...

  2. 【计算理论】正则语言 ( 正则表达式原子定义 | 正则表达式递归定义 | 正则表达式语言原子定义 | 正则表达式语言结构归纳 | 正则表达式语言示例 | 根据正则表达式构造自动机 )

    文章目录 一.正则表达式 定义 二. 正则表达式语言 原子定义 三.正则表达式语言 结构归纳定义 四.正则表达式语言 示例 五.空集 ∅\varnothing∅ 与 空字符 ε\varepsilonε ...

  3. 【计算理论】计算理论总结 ( 泵引理 Pumping 证明 ) ★★

    文章目录 一.泵引理 ( Pumping ) 二.泵引理证明示例 1 三.泵引理证明示例 2 四.泵引理证明示例 3 参考博客 : [计算理论]Pumping 引理 ( 四个等价概念 | 自动机界限 ...

  4. 计算理论——正则语言,上下文无关文法,图灵机,可判定性,可规约性

    目录 第一章 正则语言 状态图 自动机的形式化定义 非确定性 正则表达式 泵引理 使用泵引理证明某个语言非正则的方法 第二章 上下文无关文法 上下文无关文法概述 1.上下文无关文法形式化定义 2.上下 ...

  5. 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★

    文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...

  6. 【计算理论】计算复杂性 ( 阶段总结 | 计算理论内容概览 | 计算问题的有效性 | 语言与算法模型 | 可计算性与可判定性 | 可判定性与有效性 | 语言分类 ) ★

    文章目录 一.计算理论内容概览 二.计算问题的 有效性 三.语言 与 算法模型 四.可计算性 与 可判定性 五.可判定性 与 有效性 六.语言分类 一.计算理论内容概览 计算理论分为 形式语言与自动机 ...

  7. 计算理论课后习题整理

    第一章1 1.1描述DNF的状态图 1.2 画出DFA形式化描述 1.3 DNF由形式化描述画出状态图 1.6 (作业题)画出识别下述语言的DFA状态图 每个圆圈都要有字母表的输出箭头 如果不符合条件 ...

  8. 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )

    文章目录 一.通用图灵机和停机问题 二.可判定性 与 可计算性 三.语言 与 算法模型 一.通用图灵机和停机问题 利用 图灵 的结论 , 证明 有哪些 计算问题 是找不到 算法 进行判定的 ; 如 停 ...

  9. 【计算理论】Pumping 引理 ( 四个等价概念 | 自动机界限 | Pumping 引理简介 | Pumping 引理证明正则表达式 | Pumping 引理示例分析 )

    文章目录 一.四个等价概念 二.自动机界限 三.Pumping 引理 四.Pumping 引理 示例 五.证明 语言 不是正则语言 步骤 六.证明 语言 不是正则语言 示例 一.四个等价概念 1 . ...

最新文章

  1. 界面编程与视图(View)组件
  2. 4G EPS 中的消息类型
  3. Logback的配置说明
  4. Nginx 安装使用
  5. 年度最强浏览器插件来袭,打造个人完美生产力
  6. Cesium gltf(1.70)三维人物动画制作
  7. php之sprintf的用法,PHP之sprintf函数用法详解
  8. 麒麟案例 | 南浔电商领头羊+麒麟计划,碰撞出了企业下一个10年增长之路!
  9. logo去白底_如何在word编辑把网上截图过来的logo的白色底板去掉,只留下logo字样?...
  10. 白盒测试用例设计方法(语句覆盖、判定覆盖、条件覆盖)
  11. 深入浅出计算机组成原理26-Superscalar和VLIW:如何让CPU的吞吐率超过1?
  12. 量化基金投资之Alpha策略简介
  13. android u盘加载_[转] android 通过usb读取 U盘
  14. sourcetree的使用方法
  15. 使用接口测试活动的中奖概率(随机事件测试)
  16. ResNet(残差网络)详解
  17. android listview 切换,Android ListView切换按钮
  18. python比较日期时间_python时间如何比较
  19. 爬虫实战-北京链家,安居客二手房的爬取
  20. P2P技术基础: UDP打洞原理

热门文章

  1. 服务器内存插错通道影响,插入方式不对?内存插法与性能关系揭秘
  2. 【Android -- 动画】Activity 转场动画
  3. 浙江大学计算机学院足球队,浙江大学2021年“三好杯”足球赛圆满结束
  4. python中while continue的用法_Python3 循环语句while/for/break/continue用法
  5. 关于地质灾害风险性评价
  6. ortc和webrtc
  7. ctfshow SSRF web351~360
  8. VIPLE输入姓名,输出欢迎你
  9. ELK详解(二十五)——elastalert配置参数详解
  10. QCustomplot中色谱图(QCPColorMap)设置色条(QCPColorScale)