HIT-2022spr-形式语言自动机期末复习

2023-10-13 23:30

本文主要是介绍HIT-2022spr-形式语言自动机期末复习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HIT-2022spr-形式语言自动机期末复习

HIT-王春宇老师-网课网址

DFA/NFA/RegularExpression

正则表达式是一种表示正则语言的方法,ε若为正则表达式,则表示{ε}这个语言,而不是空语言。
在这里插入图片描述
注意+是并运算,而不是两个串的连接。
在这里插入图片描述
正则语言的运算↑

1. FA->RegExp

2. RegExp->FA

3. 封闭性()

正则语言在所有运算下都是封闭的

4. DFA最小化

关于终态是否等价的解释以及对于算法的规定的强调:

5. NFA转化成DFA(子集构造法)

在这里插入图片描述

6. ε-NFA转化为DFA

在这里插入图片描述
注意左侧的都是计算的ε-闭包,也就是说下面左面一列手写的{q0}实际上是q0的一个ε-闭包,手写的第一行第二个{q0}也是q0的闭包,也就是要求两次闭包。

PDA

1. PDA的定义

PDA通过 ε-NFA 加上 栈 的方式定义
ε-NFA:就是具有空转移以及不确定的能力

不确定性的例子:

(注意转移函数的因变量是状态的集合
在这里插入图片描述
例如这个读了0可以跳转到不同位置:
在这里插入图片描述

2. DPDA的定义

将PDA的ε转移能力保留,但是去掉它的非确定性能力(对于最后的ε,只能说有路就要走),就变成了DPDA。

这种语言无法接受 w w r ww^r wwr类型的串串儿,因为DPDA不具有不确定性,无法判定到哪是 w w w w r w^r wr的交界处,但是DPDA可以接受 w c w r wcw^r wcwr的语言。

3. PDA的栈

这里面的栈,push可以是一个字符串,但是pop的必须是一个字符。
每次输入带的读头读入一个字符,并向后移入一个单元格。此时会进行状态的修改,对于符号栈的读写头先pop栈顶的**一个字符**,然后push一个**字符串**.

4. 关于PDA题目的思路

一般来说就是硬干,但是加上空转移考虑就简单些,空转移的妙用可以使画的PDA看起来更清晰易懂。

两种PDA: (需要注意: 两种PDA都需要读完串儿才能结束)

注意:这两种PDA是等价的!!!,而DPDA才会出现终态比空栈多接受前缀语言的情况!!!

  1. 接受空栈
    这种PDA无法接受前缀语言(可是终态可以)
    接受空栈的PDA最终栈是需要 Z 0 ∣ ϵ Z_0|\epsilon Z0ϵ 进行清空栈的操作的,在读完串儿之前是不能将 Z 0 Z_0 Z0进行弹出的。
  2. 终止状态
    终止状态的PDA不需要考虑栈的情况,最终即使是栈没有清空(不管栈怎么样)只要到了终止状态就会结束。

CFG

1. 记牢CFG的形式定义

G = ( V , T , P , S ) G = (V,T,P,S) G=(V,T,P,S)
其中:
V V V为变元的有穷集/非终结符
T T T为终结符集合
P P P为产生式的有穷集合
S S S为初始符号
其中 S ∈ V S∈V SV

2. PDA转CFG

PDA:
P P D A = ( Q , Σ , Γ , δ , q 0 , Z 0 , ϕ ) P_{PDA} = (Q, Σ, Γ, δ, q_0, Z_0, \phi) PPDA=(Q,Σ,Γ,δ,q0,Z0,ϕ)

构造的CFG:
G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S)
δ ( q , a , X ) 的 集 合 包 含 : ( p , Y 1 Y 2 . . . Y n ) \delta(q,a,X)的集合包含:(p,Y_1Y_2...Y_n) δ(q,a,X):(p,Y1Y2...Yn)

也就是说在q的状态下读取字符a,弹出栈顶符号X,就会压入栈中一个字符串 Y 1 Y 2 . . . Y n Y_1Y_2...Y_n Y1Y2...Yn

思想:在栈中一个个弹出栈符号等价于一个个读入输入串。
也就是:为了从栈中完全弹出某一个栈符号,需要输入带上消耗掉一部分的输入串。
消耗掉的这部分输入串与栈中弹出的同栈中弹出的栈符号是一种对应关系。
如果将栈符号看成一个变元的话,相当于栈符号的变元可以派生出来被消耗掉的输入带上的输入串。
利用这样的方式来表示PDA弹空栈的一个文法。
文法的变元就对应了PDA的栈符号。but,弹出相同的栈符号,如果前后状态不同的话,读入的符号也有可能不同,所以在栈符号的前后加上相应的状态加以区分。
在这里插入图片描述
注意:带方括号的是变元,也就是非终止符,要是终止符还得像图片里面的a那个单独的明确的符号。

其实个人理解,能这样表示很大一个原因在于,PDA弹栈每次只能弹一个字符

这样,我们将p弹出栈顶X到达q状态的一个步骤表示写成一个变元 [ p X q ] [pXq] [pXq]
举个小例子:
在这里插入图片描述
列式的依据就是要把栈中的元素全部弹空到达某一个状态(因此在列式的时候,并不知道箭头左侧q弹完z,也就是全部弹空栈中元素之后会到哪(以(1)中的第一个式子为例))

3. CFG转PDA

很容易理解:
例如:在这里插入图片描述
解法:
在这里插入图片描述
注意是空栈的接收方式,注意S会被弹出,因为只要S生成终结符串(如01),那么S就没了

4. CFL封闭性

上下文无关语言的封闭性:
在这里插入图片描述
CFL在并、连接、闭包、正闭包、代换(一个符号/串对应一个语言)、同态(一个符号/串对应另一个语言中的符号)、逆同态、反转
注意CFL对交、补、差运算均不封闭。但是正则语言与CFL的交为CFL。
在这里插入图片描述

5. 关于CFG题目的思路

(1)一种挺好的思想,我暂且称作杂交法。如何构造 a i b j a^ib^j aibj的语言,使得 j < i < 2 j j<i<2j j<i<2j?
方法:
构造一个D=aaHb|ε这个串,是前面是后面的二倍,再将这个串串外面套上一堆abS=aSb|D。这样就是1倍2倍之间的了。

6. CFG化简

化简原因:
1, 有些变元是本身就无法生成的,若是放在箭头左边整一个新的产生式就多余了
2, 有的产生式不产生全部是终结符的式子
3, 有的产生ε也是多余的
化简的方法:
在这里插入图片描述
关于ε-产生式的化简
方法:找出箭头左边到底哪个是可空的,例如A为空,则然后在各个式子里面将空带入|将A保留(俩操作都需要),A若是本身能生成ε,那么把ε也删掉,注意那种隐蔽的A生成B,结果B可空的情况,这个时候A、B都是可空的。
目的在于要将原来的语言仅仅去掉一个空字符串,其余保留。
例如2019第七题:

Let L be the language generated by the grammar G below
S->AB|BBB
A->Bb|ε
B->aB|A
(1).消除空产生式
(2).消除单元产生式
(3).转换到CNF

这个题里面注意AB都是可空,所以在第一问的时候要把AB都进行ε的带入|保留A(或B) 的操作

消除单元产生式
先找到单元对如[A,B],然后进行B(在箭头左侧,要复制的是B箭头右侧的东西)到A(箭头右侧)的复制,然后将箭头右侧的A删掉(***而不是替换,因为有的时候没有要交换的地方)
确定单元对的方法:
在这里插入图片描述
消除无用符号
在这里插入图片描述
在这里插入图片描述
注意这个Bb也是产生的,不一定需要有一个式子Bb专门生成一个东东就判定,只需要根据B和b都是产生的就可以得到Bb是产生的。
注意:ε也是终结符

7. 化成乔姆斯基范式CNF格里巴赫范式GNF

在这里插入图片描述
GNF:相对于有线性文法的区别就是右线性文法里面,箭头右侧的 α \alpha α只能是零个或一个变元,而GNF里面的 α \alpha α可以是零个或者多个变元的串。
在这里插入图片描述
基本的带入方法:
在这里插入图片描述
代入代入代入!!!
后面那两个特殊情况完成之后也需要代入!!!

特殊情况:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
间接左递归要化成直接左递归之后才能代入!!!
例题:
在这里插入图片描述
在这里插入图片描述

8. 语法分析树

对于一个CFL可以有多个CFG,每个CFG在表示某个串的时候可能会有多种语法分析树(也就是多种派生方式)

Turing Machine

图灵机的定义:
在这里插入图片描述

我们要求的图灵机是不允许空转移的。
而且由于我们的基本图灵机的每个移动都是确定的,因此我们研究的图灵机是 ”确定的图灵机“
可是这种图灵机并不是Q x Σ的每个子集都是有对应的Q x Σ x L/R的,以下面的状态转移表为例:
在这里插入图片描述

需要注意的细节与区分对比

(1)

要求画NFA,不能画ε-NFA。如果跟你说要画有穷状态自动机,也就是FA,那么啥都可以(就是NFA、ε-NFA、DFA都可以)。

(2)几种语言/自动机的对比

1.语言

上下文无关语言CFL对应的自动机是PDA也就是下推自动机(但是空栈PDA要少接受一种前缀语言),对应的文法是上下文无关文法CFG
确定的上下文无关语言DCFL对应的自动机是确定的下推自动机DPDA(注意是终态方式接受的)
DCFL无法识别L(wwr),因此DCFL真包含于CFL
正则语言RegularLanguage对应的是DFA,而DFA、NFA、ε-NFA、正则表达式在接受语言的意义上来看是等价的
图灵机接受的语言为递归可枚举语言Recursively enumerable language

Regular Language感觉没给形式定义,但是给了正则表达式的语法:
在这里插入图片描述
CFG的定义,是一个四元组:
在这里插入图片描述

2.自动机

DFA是一个5元组:
在这里插入图片描述
NFA是一个五元组,与DFA的转移函数有所不同:
在这里插入图片描述
ε-NFA转移函数多了一个读入ε的功能
在这里插入图片描述
PDA为七元组,多了一个栈符号集以及栈底符号:
在这里插入图片描述
DPDA为七元组,但是与PDA并不等价
在这里插入图片描述

图灵机是7元组:在这里插入图片描述
总结起来,可以发现,FA都是基础性的5元组,而其他的自动机则是在FA的五元组基础上加上各自特色的两个元素组成七元组

(3)区分两个PumpingLemma

正则语言的:
在这里插入图片描述
xyz, xy限制大小, y不空, 泵y
例子:
在这里插入图片描述

CFG的:
在这里插入图片描述
uvwxy, 限制vwx, vx不空, 泵vx
也就是谁不空泵谁,但是大小小于N的限制这两引理还是有区别的

(4)区分文法/表达式与语言

正则文法/正则表达式 -> 正则语言
上下文无关文法 -> 上下文无关语言

Problem Review

Problem 4

1.Construct a Turing machine that accepts L = { w ∈ {a, b}* | w has an equal number of a’s and b’s}.
答案:
在这里插入图片描述
就是开头分情况要敢写,构造图灵机的过程更像一个从头到尾过一遍的过程,当然还要考虑最初始的那个状态直接跳到终止状态的的情况。

2.Let x and y are positive numbers. Please design a Turing Machine (diagram) to compute x – y of x and y). You should explain the notation of x and y. Hint : you may get the notation as simple as you can.
注意这道题需要考虑结果为负数的情况!
在这里插入图片描述
3.Use the CFL pumping lemma to show that the following language is not context free
a i b j c k ∣ i < j < k { a^i b^j c^k | i < j < k } aibjcki<j<k
注:CFL的泵引理如图
在这里插入图片描述
a N b N + 1 c N + 2 a^Nb^{N+1}c^{N+2} aNbN+1cN+2即可证明
4.If L1 and L2 be two CFL’s. Is it necessarily true that L1 − L2 is also a CFL? Prove your answer.
这里面问题类型是CFL的闭包
这道题实际上答案是并不构成闭包
首先应该知道一些知识:ww并不是CFL而非ww的语言却是(全集是{0,1}*)
所以这么一看差运算并不能使CFL满足运算封闭
另外 0 N 1 N 2 0^{N}1^{N^2} 0N1N2也不是CFL

另外一个感受是要看看孙大烈的problem和PPT(当然wcy网课最好也看)

5.Show that the regular languages are closed under the following operations: min(L) = { w | w is in L, but no proper prefix of w is in L }.
这里面要求证明的是正则语言的封闭性
也就是说,我们只要构造出来对应的FA就可以了
这个方法就是将终态之后的箭头都指向一个死状态(而且是非终止状态)

6.Prove. For every context-free language L, the language L ‘ = { 0 ∣ w ∣ ∣ w ∈ L } L` = \{ 0^{|w|} | w ∈ L \} L={0wwL} is also context-free.
这里利用了CFL同态的封闭性:
在这里插入图片描述

需要学习的知识点:

  1. 右线性文法和DFA的关系:DFA可以用右线性文法进行表示,方法就是把DFA中的状态当作变元,每次造访完一个状态就产生一个读完的字符,这个字符右侧的变元是新到达的状态
  2. DPDA
  3. 文法的歧义性
  4. GNF:见前面

这篇关于HIT-2022spr-形式语言自动机期末复习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/206608

相关文章

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

POJ 1625 自动机

给出包含n个可见字符的字符集,以下所提字符串均由该字符集中的字符构成。给出p个长度不超过10的字符串,求长为m且不包含上述p个字符串的字符串有多少个。 g++提交 int mat[108][108] ;int matn ;int N ;map<char ,int> to ;//ACconst int maxm = 108 ;const int kin

zoj 3228 ac自动机

给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。 Sample Input ab 2 0 ab 1 ab abababac 2 0 aba 1 aba abcdefghijklmnopqrstuvwxyz 3 0 abc 1 def 1 jmn Sample Output Case 1 1 1 Case 2

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

计算机基础知识复习9.6

点对点链路:两个相邻节点通过一个链路相连,没有第三者 应用:PPP协议,常用于广域网 广播式链路:所有主机共享通信介质 应用:早期的总线以太网,无线局域网,常用于局域网 典型拓扑结构:总线型 星型(逻辑总线型) 介质访问控制  静态划分信道 信道划分介质访问控制 频分多路复用FDM 时分多路复用TDM 波分多路复用WDM 码分多路复用CDM 动态分配信道 轮询访问介质访问控

正规式与有限自动机例题

答案:D 知识点: 正规式 正规集 举例 ab 字符串ab构成的集合 {ab} a|b 字符串a,b构成的集合 {a,b} a^* 由0或者多个a构成的字符串集合 {空,a,aa,aaa,aaaa····} (a|b)^* 所有字符a和b构成的串的集合 {空,a,b,ab,aab,aba,aaab····} a(a|b)^* 以a为首字符的a,b字符串的集

【抽代复习笔记】28-群(二十二):四道子群例题

例1:证明,循环群的子群是循环群。 证:设G = (a),H ≤ G。 (1)若H = {e},则H是一阶循环群; (2)设H至少包含2个元素,即设H = {...,a^(-k),a^(-j),a^(-i),a^0,a^i,a^j,a^k,...}, 其中a^i是H中正指数最小的元素,0<i<j<k, 下证a^i是H的生成元: 对任意的a^t∈H(t∈Z),存在q∈Z,使得t = qi

西方社会学理论教程复习重点

一.名词解释 1.社会静力学:旨在揭示人类社会的基本秩序。它从社会的横断面,静态的考察人类社会的结构和制度,寻找确立和维护人类社会的共存和秩序的原则。 2.社会动力学:纵观人类理性和人类社会发展的先后必要阶段,所叙述的是这一基本秩序在达到实证主义这一最终阶段之前所经过的曲折历程。 3.社会事实:一切行为方式,不论它是固定的还是不固定的,凡是能从外部给予个人以约束的,或者说是普遍存在于该社会各

完整版自考西方文论选复习笔记资料

西方文论选读复习资料 1.柏拉图:古希腊哲学家,苏格拉底的学生。公园前387年在雅典城外建立学园开始授徒讲学,撰写对话。柏拉图的作品即《柏拉图文艺对话集》中讨论美学和文艺理论问题较多的有:《大希庇阿斯》、《伊安》、《高吉阿斯》、《会饮》、《斐德若》、《理想国》、《斐利布斯》、《法律》等。 ▲柏拉图《伊安》和《斐若德》内容:主要阐述了"迷狂说"和"灵魂回忆说":柏拉图认为,高明的诗人都是凭灵

ia复习笔记

HCIA 常用配置以及快捷键:! 查看时间:display clock;修改时间:clock datetime 11:11:11 2023-1-1 查看设备当前的配置:display current-configuration;查看已保存的配置:display saved-configuration;保存配置:save;查看历史的十条命令:display history-command;