首页 > 其他分享 >速通 形式语言与自动机

速通 形式语言与自动机

时间:2024-01-13 14:23:55浏览次数:25  
标签:语言 varepsilon 空栈 速通 形式语言 图灵机 delta 自动机 rightarrow

有啥要学的?


DFA/NFA 的记号:\((Q,\Sigma,\delta,q_0,F)\)。

NFA 到 DFA:子集构造(到 \(2^n\) 级别的构造:所有最后第 \(n\) 位为 \(1\) 的 01 串)。

\(\varepsilon-\)NFA 到 DFA:类似地进行子集构造,每次转移时考虑对应 \(\varepsilon-\)闭包。

文本搜索:trie 树(记得加上根到自身的 \(\Sigma\) 自环,因为是匹配部分文本),转 DFA 即 AC 自动机。

闭包有限的集合:\(\phi,\varepsilon\)。

DFA 到正则表达式:

  • 路径迭代法:\(R_{i,j}^{(k)}\) 表示编号 \(\leqslant k\) 的路径对应的正则表达式。求法:从小到大枚举 \(k\),每次令 \(R_{i,j}^{(k)}=R_{i,j}^{(k-1)}+R_{i,k}^{(k-1)}(R_{k,k}^{(k-1)})^*R_{k,j}^{(k-1)}\)。
  • 消除状态法:每次选择一个点缩(记得自环)。

检验正则表达式是否为真:代入不同字母。

正则表达式到 \(\varepsilon-\)NFA:懂得抖动。

image

image

image

正则语言的泵引理:存在常数 \(n\) 使得对于 \(|w|\geqslant n\),我们能将其分为 \(w=xyz\) 使得 \(y\ne \varepsilon,|xy|\leqslant n\),且 \(\forall k\geqslant0,xy^kz\in L\)。

同态:将每个字符替换成字符串;逆同态:将每个字符替换成字符串后在给定语言里。

DFA 最小化 / DFA 等价判定:填表算法,不断通过 \(\hat\delta(p,w)\ne\hat\delta(q,w)\) 否定两个状态等价。

CFG:\((V,T,P,S)\),变元集合,终结符集合,产生式集合,初始符号。

最左推导:每次替换最左侧变元。

递归推理:将某个字符串根据其所在非终结符形式阶段,递归各个子串检查。

语法分析树。

存在上下文无关语言使得任意描述其文法都是二义的:\(\{a^nb^mc^md^n\}\cup\{a^nb^nc^md^m\}\)。

可用最左推导不唯一证明文法的二义性。

PDA:\((Q,\Sigma,\Gamma,\delta,q_0,Z_0,F)\),状态集合,输入符号集合,堆栈字母表,转移函数 \(\delta(q,a,X)=\{(p,\varepsilon/X/YZ)\}\),初始状态,初始符号,接受状态集合。

PDA 的瞬时描述:\((q,w,\gamma)\)(栈顶靠左)。

对于 \((q,x,\alpha)\vdash^*(q,y,\beta)\),那么有 \((q,xw,\alpha\gamma)\vdash^*(p,yw,\beta\gamma)\)。

PDA 的接受方式:终结状态与空栈方式(此时 PDA 描述只有六项)。

  • 空栈方式到终结状态:定义新的符号放置栈底表示栈空;
  • 终结状态到空栈方式:终结状态连向一个弹栈状态。

上下文无关文法到空栈 PDA:尝试模拟文法的最左推导,用栈从上往下记录需要展开的非终结符/需要消去的终结符。

空栈 PDA 到上下文无关文法:定义符号 \([pXq]\) 表示从 \(p\) 走到 \(q\),弹去了一个 \(X\)。接下来将转移边变化为:

  • 起始状态:\(S\rightarrow[q_0Z_0q]\),其中 \(q\) 为任意状态;
  • \((p,\varepsilon)\in \delta(q,a,X)\):\([qXp]\rightarrow a\);
  • \((p,X)\in\delta(q,a,X)\):\([qXq_1]\rightarrow a[pXq_1]\);
  • \((p,Y_1Y_2\cdots Y_mZ)\in\delta(q,a,x)\):\([qXq_m]\rightarrow a[pY_1q_1][q_1Y_2q_2]\cdots[q_{m-1}Y_mq_m]\)。

DPDA:要求转移边确定。

前缀性质:不存在两个接受串为前缀关系。

语言 \(L\) 能被某个 DPDA 空栈接受当且仅当其有前缀性质且存在 DPDA 以终结状态接受其。

DPDA 以空栈接受/终结状态接受的语言均无歧义。前者显然,后者我们将语言中添加未出现的“结束标记”,那么语言有前缀性质,存在 DPDA 空栈接受其,将该空栈 DPDA 的文法改写为原语言的文法即可,只需添加结束标记 \(\rightarrow\varepsilon\) 的转移。

范式:去除无用符号(非产生,不可达),去除 \(\varepsilon\) 产生式(\(A\rightarrow\epsilon\)),去除单位产生式(\(A\rightarrow B\))。

  • 寻找产生符号:从终结符开始往前拓扑排序,每次检查非终结符产生的符号是否均可产生;
  • 寻找可达符号:从初始符号开始向后 bfs;
  • 去除 \(\varepsilon\) 产生式:从 \(\varepsilon\) 往前拓扑排序,并将可空符号对应推导修改(注意这一步会让文法无法生成 \(\varepsilon\));
  • 去除单位产生式:搜索出所有单位对(可用一系列单位产生式生成的)\((A,B)\),并在新的语言中直接构建 \(A\) 到 \(B\) 非单位产生式的推导。

乔姆斯基范式(CNF):多叉转二叉,即任意产生式都能写为 \(A\rightarrow AB\) 或 \(A\rightarrow a\)。

上下文无关语言的泵引理:存在常数 \(n\) 使得对于 \(|z|\geqslant n\),我们能将其分为 \(w=uvwxy\) 使得 \(|vwx|\ne\varepsilon\) 且 \(\forall k\geqslant 0,uv^kwx^ky\in L\)。

上下文无关语言与正则语言的交仍是上下文无关语言(构造考虑同时模拟 PDA 与 DFA),但与上下文无关语言的交并不一定,如 \(\{0^n1^n2^i\}\cap\{0^i1^n2^n\}\)。

上下文无关语言的逆同态仍是上下文无关语言:Page 203,先鸽了。

CFL 空性测试:拓扑排序。

CFL 成员性测试(CYK 算法):区间 dp,dp 值记录集合。

判定 CFG 是否歧义,判定 CFL 是否故有歧义,判定两个 CFL 交为空,判断两个 CFL 相同,判断某个 CFL 是否等于 \(\Sigma^*\),这些问题都是不可判定的。

图灵机:\((Q,\Sigma,\Gamma,\delta,q_0,B,F)\):状态集合,输入符号集合,带符号集合(且 \(\Sigma\subseteq\Gamma\)),转移函数,初始状态,空格符号,接受状态集合。

图灵机的瞬时描述:\(X_1X_2\cdots X_{i-1}qX_{i}X_{i+1}\cdots X_n\),\(X\) 一般是最靠左/最靠右非空格位置中间的部分,若带头在这一区域外,则我们会将空格纳入描述。

图灵机的停机接受(即转移函数无定义)。

图灵机的“多道”只需将状态记录为 \(n\) 元 tuple。

非确定性图灵机不比确定性图灵机强。

半无穷带,不写空格图灵机不比图灵机弱(考虑双带构造)。

双堆栈 PDA 比图灵机强。

单计数器比 DPDA 强,双计数器比图灵机强(先用三计数器构造,再换为双计数器)。

标签:语言,varepsilon,空栈,速通,形式语言,图灵机,delta,自动机,rightarrow
From: https://www.cnblogs.com/xiaoziyao/p/17961089

相关文章

  • 后缀自动机(SAM)
    对OIWIKI进行了抄写删减精炼定义字符串\(s\)的SAM是一个接受\(s\)的所有后缀的最小DFA(确定性有限自动机或确定性有限状态自动机)。SAM是一张有向无环图。节点称作状态,边称作转移图存在一个源点\(t_0\),称作初始状态(即下图红点),其他节点均可从\(t_0\)出发到达转移......
  • KMP与自动机
    KMP与AC自动机都是字符串匹配KMP是单模匹配ac自动机是多模匹配KMP原理例子当我们匹配字符串A(长度为n)中是否有B(长度为m,m<n)的时候比如:AABCDABCDEFBABCDE一个朴素的思路是暴力,复杂度当然是O(n*m)KMP就是一个优化的算法KMP的理论基础就是,并不是每次匹......
  • 「笔记」回文自动机
    目录写在前面结构构造复杂度证明模板题代码写在最后写在前面其实这东西学名叫EERTree,PalindromicTree,直译是回文树,但本质上是一类有限状态自动机所以也可以叫PalindromicAutomaton,因为我很喜欢自动机所以以下都叫它回文自动机。结构类似后缀自动机的,回文自动机(以下简称P......
  • 亚马逊云科技如何完善自动机器人及大语言模型的问答回复准确度
     概述 客户联络中心在现代是构成一个完整企业的重要组成部分,作为企业与顾客的连接纽带,在销售、服务支持以及提升顾客满意度方面发挥着至关重要的作用。使用亚马逊云科技AmazonConnect出海企业可以快速搭建自己的全球客服联络中心。当前客服联络中心也面临诸多的挑战,如长时间的电......
  • AI问答:关于字符串匹配算法的区别及应用场景,哈希/kmp/字典树/AC自动机
    1. 哈希(Hashing):哈希是一种将字符串转换为唯一标识符的技术,通常用于字符串的快速查找和比较。实现难度相对较低,但需要处理哈希冲突的问题。哈希在处理大量数据的查找和比较问题时非常实用。2. KMP(Knuth-Morris-Pratt):KMP 是一种用于字符串匹配的算法,特别适用于查找子串在主串中的......
  • HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机
    双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配。如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配。比如ushers、shers、hers…这样一份文本要回退扫描多遍,性能较低。既然AC自动机的goto表本身就是一......
  • 回文自动机(PAM)的简单应用
    记录回文自动机的一些应用实例​ 题目主要来源模板​ 跑\(PAM\)就是构建两棵字典树,字典树上(奇偶)根到不同节点都对应了一个原串中本质不同的回文串,同时维护了每个回文串对应的最长回文后缀。​ 这个模板定义节点\(0\)为偶根,节点\(1\)为奇根(有些板子可能反过来)\(next[i][j]\):当......
  • 2023CCPC女生专场 L 字符串游戏【AC自动机】
    一句话题解:AC自动机,在fail树上自顶向下预处理,以实现O(1)统计答案Description:n个模式串{Sn},1个文本串T。每次小B会选取T的一个子串(只要子串位置不相同则视作不同),对答案的贡献是该子串中含有的模式串的总数目。对于选取子串的所有方法,求总共的答案。Solution:对于文本串出现的......
  • 「杂文」身为 OIer 的我要在第 7 周速通《汇编语言》,我为什么会做这样的梦(雾)
    目录写在前面计算斐波那契数列第\(i\)项写在最后写在前面编译器为MASM-v6.11写的一坨屎。计算斐波那契数列第\(i\)项最多支持输出30位十进制数。为第22行的cx寄存器赋值即为所求的项。.modellargeassumecs:code,ss:stackstringsegmentdb30dup(0),......
  • AC自动机与dp详解
    AC自动机与dp前言:本篇题解隶属于https://www.cnblogs.com/linghusama/p/17742870.html部分首先一定要理解fail跳的原理,不然很难理解第二维为什么要设置。首先给出大致的雏形,dp_i_j表示目前拼凑出长度为i的字符串,且ac自动机上的指针在j位置时的字符串方案数。适用题型:对于求......