形式语言与自动机
形式语言与自动机
南京大学2025-2026秋季学期课程
引言
1.自动机可以理解为检测一种形式化语言的工具,通过用节点表示状态,用边表示状态的迁移,最简单的是确定性有穷状态机,状态有限,根据输入的内容确定性进行状态迁移。
“最终”和”接受“两个状态:自动机接受一个语言的字符串,如果最终停止的状态节点是被接受的,那么这个状态是终止状态,终止状态是可以有出边的,因为可能有没读完的字符串。
有穷状态机
非确定性有穷自动机 NFA
非确定性有穷自动机:对于确定性有穷自动机,可以理解为一个棋子在地图上走路,当前所处位置和下一次接受的输入,唯一地决定了下一个状态;可是非确定性有穷自动机却不一样,非常的有意思,和我一开始理解的不同,并不是根据概率转移(像马尔可夫链一样),而是在接受输入后变为n个确定性有穷状态机,可以理解为一个小队在探险,在某些情况下几人分头行动。
NFA与DFA的等价性
DFA显然是一种NFA,但是从NFA到DFA的构造,我们采用子集构造法(一种在计算机科学领域常用的证明方法)。
对于一个
子集构造的过程其实就是根据NFA去构造一个等价的DFA,而这个过程的核心要点就是将NFA中的多状态并行转化为状态的集合,将这个集合当作等价DFA的单状态,其实也就是上面所说的,只要这个状态中包含一个终止状态,那么这个状态集合就可以作为DFA的一个终止状态。
NFA到DFA的转移
带 转移的NFA
闭包
从初始状态
从 NFA到DFA
- DFA的初始状态是NFA初始状态的
闭包 - DFA每做一次
转移,就要做一次 闭包
正则表达式
正则表达式表示了一种语言称为正则语言,这种语言通常是一个字母表所构成的语言的子集。
比如$01^{}+10^{}
正则表达式的三种操作:
- 并:二者选其一
- 连接:直接拼接
- 克林闭包:任选多个元素重复
从有穷自动机到正则表达式
构造出一种正则语言使得其能够表示DFA中所有的状态迁移。
定理:若存在一个
从DFA构造正则表达式:[DFA到等价正则表达式的转化 - jjppp - 博客园]
Arden’s Theorem
形如
从有穷自动机到正则表达式的转化只需要将有穷状态机的状态转化为接受正则表达式的集合,然后列线性方程组求解即可。
从正则表达式到有穷自动机
首先为基础的正则表达式,单个字符,构建自动机,然后将自动机组合。
将正则表达式转化为DFA的关键在于:将正则表达式的部分拆分为基础的表达式,然后拼接起来。
克林公式的递推性质
但是克林公式只是表示到达一次的,所以如果存在自环需要在后面加上自环的闭包。
正则语言的性质
正则语言的泵引理
设
- 对于所有的
,串
将使用泵引理证明语言
- 在最后一步选择k时需要根据实际问题分析
正则语言的封闭性
布尔运算
1.并运算的封闭
2.补运算的封闭
3.交运算的封闭:构造乘积自动机
4.差运算的封闭性: