学习资料:

https://www.cnblogs.com/Bubgit/p/10240790.html

https://blog.csdn.net/shulianghan/article/details/111393044

https://www.cnblogs.com/raicho/p/11762837.html

https://blog.csdn.net/elice_/article/details/80550413

https://baike.baidu.com/item/泵引理/9490334?fr=aladdin

https://blog.csdn.net/zxbdsg/article/details/112424714

一、正则表达式与状态转移图

正则表达式

正则操作:

1.⋅\cdot⋅ 表示连接(可省略)

例: abc⋅123=abc123abc \cdot 123 = abc123abc⋅123=abc123

2.∣\mid∣ 表示或

例: abc∣123={abc123abc \mid 123 = \begin{cases} abc \\123\end {cases}abc∣123={abc123​

3.∗*∗ 运算start

stri={εi=0stri−1⋅stri>=1str^i = \begin{cases} \varepsilon & i=0 \\ str^{i-1} \cdot str & i>=1 \end{cases}stri={εstri−1⋅str​i=0i>=1​

其中ε\varepsilonε指空串

例:{0,1}∗={ε}∪{0,1}∪{00,01,10,11}...\{0,1\}^* = \{\varepsilon\} \cup \{0,1\} \cup \{00,01,10,11\} ...{0,1}∗={ε}∪{0,1}∪{00,01,10,11}...

计算优先级

有小括号先算小括号, ∗>⋅>∣* > \cdot > |∗>⋅>∣

状态转移图

状态转移图中,节点表示状态,边表示输入字母,双圈表示终态

正则表达式转换为状态转移图:

对于∗*∗运算符的特别说明:

转换过程为:

  1. 将所有的接受/中止状态使用 ε\varepsilonε 箭头 , 从 接受/终止状态 指向 开始状态 ;
  2. 添加新的开始状态: 添加接受状态作为开始状态 , 指向开始状态 ;

图例:

二、DFA(Deterministic Finite Automaton)

有穷自动机。如果一个语言可以被有穷自动机识别则称之为正则语言,其定义为一个五元组

定义:

DFA=(Q,Σ,q0,F,δ)DFA = (Q,\Sigma,q_0,F,\delta)DFA=(Q,Σ,q0​,F,δ)

说明:

  1. QQQ : 有穷集合,状态集
  2. Σ\SigmaΣ :有穷集合,字母集
  3. q0q_0q0​ : q0∈Qq_0 \in Qq0​∈Q, 表示开始/起始状态 (start/initial state)
  4. FFF : F⊆QF \subseteq QF⊆Q , 表示最终/接受状态 (final/accept state)
  5. δ\deltaδ : Q1×Σ→Q2Q_1 \times \Sigma \rightarrow Q_2Q1​×Σ→Q2​ 转移函数

理解: 类比于状态转移图

Q: 图中所有的节点

Σ\SigmaΣ:边的集合

q0q_0q0​:初始节点

FFF:最终节点(双圈)

ε\varepsilonε : 图中的逻辑规则

图例:

s∈S,a∈Σ,δ(s,a)s\in S, a \in \Sigma,\delta(s,a)s∈S,a∈Σ,δ(s,a)表示从状态s出发,沿着标记a所能到达的状态

例:当s=0,a=as=0,a=as=0,a=a时,从状态0出发,经过a只能够到达1

三、NFA(Non-deterministic Finite Automaton)

非确型有穷自动机。同样是五元组

定义:

NFA=(Q,Σ,q0,F,δ)NFA = (Q, \Sigma, q_0, F, \delta)NFA=(Q,Σ,q0​,F,δ)

说明:

  1. 前四个与DFA定义相同
  2. δ\deltaδ : Q1×Σ→P(Q)Q_1 \times \Sigma \rightarrow P(Q)Q1​×Σ→P(Q) P(Q)P(Q)P(Q)表示一个状态的子集

图例:

s∈S,a∈Σ,δ(s,a)s \in S, a \in \Sigma,\delta(s,a)s∈S,a∈Σ,δ(s,a)表示从状态s出发,沿着标记a所能到达的状态集合

因为可能是一个状态集合,所以NFA的状态图可能有不同的后继

例:当s=0,a=as=0, a=as=0,a=a时,能够到达的状态集合是{0,1}\{0, 1\}{0,1}


NFA与DFA的不同:

  1. ε−transation\varepsilon- transationε−transation is allowed 允许读入一个空串即ε\varepsilonε (状态转移结果还是自身)
  2. Many possible next states at each step 每一步都可能有多种可能性

NFA可以使用**(subset construct)子集构造法**转换为DFA

练习1:

1.设有 NFA M=( {0,1,2,3}, {a,b},f,0,{3} ),其中 f(0,a)={0,1} f(0,b)={0} f(1,b)={2} f(2,b)={3}

画出状态转换矩阵,状态转换图,并说明该NFA识别的是什么样的语言。

NFA a b
0 0,1 0
1 ∅\varnothing∅ 2
2 ∅\varnothing∅ 3
3 ∅\varnothing∅ ∅\varnothing∅

语言:(a∣b)∗abb(a | b)*abb(a∣b)∗abb

四、子集构造法:NFA转化为DFA

在有穷自动机的理论里,有这样的定理:设L为一个由不确定的有穷自动机接受的集合,则存在一个接受L的确定的有穷自动机

所以非确定有穷自动机NFA可以转换为DFA,对于上面的例1流程如下:

第一步 构建自定义状态III

子集构造法,简单来说思路就是将一些状态作为集合成为一个新的状态

III的初始选择规则:从初始状态q0q_0q0​经过任意数量的ε\varepsilonε能够到达的状态的集合

对于例1来说,上例就是状态0

IxI_xIx​表示集合III的每个状态节点经过xxx(可经过ε\varepsilonε)的所有结果集合的并集

对于上例来说,只有一个0状态节点,所以,状态0经过a可以到达的状态集合是{0,1}, 经过b可以到达的状态集合是{0}

下面选择III的规则是: 从上一次的所有Ix,x∈ΣI_x, x\in \SigmaIx​,x∈Σ中选择一个作为III,但是每个IxI_xIx​只可选择一次

对于上例来说,可以只能选择{0, 1},因为{0}已经在最开始选择了(为了避免自定义的重复),作为III, 则其对应的Ia、IbI_a、I_bIa​、Ib​如下图

0的Ia={0,1},Ib={0}I_a = \{0, 1\}, I_b = \{0\}Ia​={0,1},Ib​={0} , 1的Ia=∅,Ib={2}I_a = \varnothing, I_b = \{2\}Ia​=∅,Ib​={2} => (取并集) Ia={0,1},Ib={0,2}I_a = \{0, 1\}, I_b = \{0, 2\}Ia​={0,1},Ib​={0,2}

同理选择下一个I={0,2}I = \{0, 2\}I={0,2}, 继续计算….

III IaI_aIa​ IbI_bIb​
A {0} {0, 1} {0}
B {0, 1} {0, 1} {0, 2}
C {0, 2} {0, 1} {0, 3}
D {0, 3} {0, 1} {0}

最终自定义状态为:A={0}, B={0, 1}, C={0, 2}, D={0, 3}

第二步 画出DFA状态转移图

首先根据上面的表格就立即可以得出状态转移表:

DFA a b
A B A
B B C
C B D
D B A

画出状态转移图像:

检查图中没有同一输入的多后继节点则说明满足DFA

例2

答案:

五、Pumping lemma 泵定理

正则语言都需要满足泵定理,泵引理是形式语言与自动机理论中判定一个语言不是正则语言的重要工具

定义

For every regular language L, there is a pumping length PPP, such that for any string S∈LS \in LS∈L and ∣S∣≥P|S| \ge P∣S∣≥P, We can divide SSS into 3 pieces and write S=xyzS = xyzS=xyz with:

1.xyiz∈Lxy^iz \in Lxyiz∈L For every i∈{0,1,2,3,…}i\in \{0,1,2,3,…\}i∈{0,1,2,3,…}

2.∣y∣≥1|y| \ge 1∣y∣≥1
3.∣xy∣≤P|xy| \le P∣xy∣≤P

Note that 1 implies that xz∈Lxz \in Lxz∈L

2 say that y cannot be the empty string ε\varepsilonε (2 说明了y不能是空串)

condition 3 is not always used

中文版:

使用

简单的来说,使用的过程就是不断的Pump(重复)其中的若干部分,使得到新的字符串仍满足RL,所以一般使用反证法去反证

例1:

证明 0n1nn≥00^n1^n \ n\ge00n1n n≥0不是一个RL (regular language)

证明如下:

assume that B={0n1n,n≥0}B = \{0^n1^n,n\ge0\}B={0n1n,n≥0} is regular language (反证法: 假设B是一个RL)

let p be the pumping length, and S=0p1p∈BS = 0^p 1^p \in BS=0p1p∈B (设一个pumping 长度为p,则可得到S,其长度刚刚好为p,满足不小于p)

then S=0p1p=xyzS = 0^p1^p=xyzS=0p1p=xyz (根据RL满足的泵定理,将S分割为三个部分)

let x=0p−k,y=0k,z=1p,k>0x = 0^{p-k}, y=0^k,z=1^p, k>0x=0p−k,y=0k,z=1p,k>0 (分别假设每一个部分xyz的值)

so, xy=0pxy = 0^pxy=0p, it meets the ∣xy∣=p≤p|xy| = p \le p∣xy∣=p≤p (验证第三个条件,满足)

because k > 0, so, it meets the ∣y∣≥1|y| \ge 1∣y∣≥1 (验证第二个条件,满足)

but, (验证第三个条件,不满足,所以不是一个RL)

xy1z=0p−k0k1p=0p1p∈B,xy2z=0p−k02k1p=0p+k1p∉B,xy3z=0p−k03k1p=0p+2k1p∉B,...xy^1z =0^{p-k}0^k1^p = 0^p1^p \in B, \\ xy^2z = 0^{p-k}0^{2k}1^p=0^{p+k}1^p \notin B, \\ xy^3z = 0^{p-k}0^{3k}1^p=0^{p+2k}1^p \notin B, \\ ...xy1z=0p−k0k1p=0p1p∈B,xy2z=0p−k02k1p=0p+k1p∈/​B,xy3z=0p−k03k1p=0p+2k1p∈/​B,...

The pumping result does not hold,the languge B is not regular

例2

证明E={0i1ji>j}E=\{0^i1^j \ i>j\}E={0i1j i>j}不是RL

证明如下:

Assume that EEE is a regular language with pumping length p

let S=xyz=0p+11p∈ES = xyz = 0^{p+1}1^{p} \in ES=xyz=0p+11p∈E

let x=0p−k,y=0k,z=01p,k>0x=0^{p-k} \ , y =0^k \ ,z=01^p, k > 0x=0p−k ,y=0k ,z=01p,k>0

so, it meets the ∣xy∣=p≤p|xy|=p \le p∣xy∣=p≤p and ∣y∣≥1|y| \ge 1∣y∣≥1

xy2z=0p−k02k01p=0p+k+11p∈Exy3z=0p−k03k01p=0p+2k+11p∈E...xy^2z=0^{p-k}0^{2k}01^p=0^{p+k+1}1^p \in E \\ xy^3z=0^{p-k}0^{3k}01^p=0^{p+2k+1}1^p \in E \\ ...xy2z=0p−k02k01p=0p+k+11p∈Exy3z=0p−k03k01p=0p+2k+11p∈E...

so, if i≥0i \ge 0i≥0, it meets xyiz∈Exy^iz \in Exyiz∈E,

but, if i=0i=0i=0, S=xz=0p−k+11p,k>1∉ES=xz=0^{p-k+1}1^p ,k>1 \notin ES=xz=0p−k+11p,k>1∈/​E

so, The pumping result does not hold,the languge E is not regular

计算理论基础-1-FA有穷自动机与Pumping_Lemma泵定理相关推荐

  1. 【计算理论】确定性有穷自动机 ( 自动机组成 | 自动机语言 | 自动机等价 )

    文章目录 一.确定性有穷自动机组成 二.确定性有穷自动机计算过程 三.确定性有穷自动机定义 四.自动机 语言 与 等价 五.自动机语言 示例 一.确定性有穷自动机组成 DFA , 全称为 Determ ...

  2. 【计算机科学基础】计算理论基础

    计算理论是研究计算模型的一门学科,是研究理论计算机的科学. 理论计算机是研究计算机的理论模型,研究计算机的本质,也就是把计算机看成一个数学系统.这是因为,计算机科学的基本思想和模型在本质上是数学(离散 ...

  3. 计算系数(二项式定理逆元费马小定理)

    给定一个多项式(ax+by)^k,请求出多项式展开后(x^n)*(y^m)项的系数. 输入格式 共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开. 输出格式 输出共 ...

  4. 牛客小白月赛5 E 面积 计算三角形面积模板 波尔约-格维也纳定理 匹克公式

    链接:https://www.nowcoder.com/acm/contest/135/E 来源:牛客网 题目描述 定义"最大生成图":在M*N的点阵中,连接一些点形成一条经过所有 ...

  5. 计算理论导论|正则语言(下)正则表达式、泵引理

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

  6. 计算理论是研究用计算机解决,可计算性理论

    可计算性理论(Computability theory)作为计算理论的一个分支,研究在不同的计算模型下哪些算法问题能够被解决.相对应的,计算理论的另一块主要内容,计算复杂性理论考虑一个问题怎样才能被有 ...

  7. 【计算理论】计算理论总结 ( 自动机设计 ) ★★

    文章目录 一.自动机设计 二.自动机设计 1 三.自动机设计 2 四.自动机设计 3 五.自动机设计技巧 一.自动机设计 设计自动机 : 之前是根据给定的自动机 , 找到自动机所能识别的语言 ; 现在 ...

  8. 【计算理论】计算复杂性 ( 计算理论内容概览 | 计算问题的有效性 | 时间复杂性度量 | 输入表示 | 时间复杂度 )

    文章目录 一.计算理论内容概览 二.计算问题的判定性 三.计算问题的 有效性 四.时间复杂性度量 五.算法有效性 数学定义需求 六.输入表示 七.时间复杂度 一.计算理论内容概览 计算理论分为 形式语 ...

  9. 计算机科学的理论基础

    计算机基础理论采用数学和逻辑学并吸收语言学,生理学,心理学等基础科学的理论和方法研究计算机领域的基础问题.这一领域有许多景点问题和不断产生的新问题,其中有一些估计会在新世纪取得突破并导致整个计算机科学 ...

最新文章

  1. 命令行带参数启动--命令行相关问题 代码规范
  2. java thread join_java中thread的join方法为什么能让线程插队
  3. Quantile Regression,python
  4. 超纯超美的曲线(Peter De Jong Attractor)
  5. 第19节 项目整体绩效评估.
  6. Python学习笔记:常用内建模块2:collections
  7. 【技术改造】电商系统用户模块集成Feign-1
  8. 十二 Cent OS下 tomcat启动项目响应速度很慢
  9. TCP/IP,Http,Socket,XMPP的区别
  10. LeetCode贪心 数组拆分I
  11. P4178 Tree
  12. jdk switch 枚举_JDK 12开关表达式遇到意外的枚举值
  13. 联通sgip协议 java socket_sgip12 个人编写的 联通SGIP协议基于 socket 方式实现 源 联合开发网 - pudn.com...
  14. js判断html存不存在某个属性,javascript如何判断对象是否存在某属性?
  15. 力扣(leetcode)67. 二进制求和——c语言新手入门
  16. python-房贷内部收益率计算
  17. python使用openCV图像加载(转化为灰度图像)、平滑图像处理就是将每个像素的值变换为其相邻元素的平均值、可视化平滑处理之后的图像(Blurring Images)
  18. qt线程如何接收linux信号,Linux-Qt使用QThread多线程isRunning标志量问题
  19. 10-JDBC的完整步骤【建议收藏】
  20. 20175208 实验一 Java开发环境的熟悉

热门文章

  1. keyshot渲染图文教程_keyshot渲染图文教程,教你如何渲染冰的效果
  2. 知数堂MySQL DBA在线培训第八期招生中
  3. excel自动排班表_最火8套建筑工程测量计算表,傻瓜式操作,自动计算出结果,速领...
  4. 创造一个计算机语言,世界上第一个文言文编程语言诞生,创造它的是一个大学生...
  5. Windows 10 截图工具
  6. 1.1 机器人学之空间描述和变换
  7. TensorFlow团队:TensorFlow Probability的简单介绍
  8. MATLAB 错误使用 instfreq TFD 应“非负”
  9. 【GTASA】路人PED替换语音教程
  10. 优盘在计算机上无法显示,u盘在电脑上识别不出来怎么办_u盘在电脑不显示如何修复-win7之家...