01-有限自动机&正则文法
基础概念
Alphabet: ,有限的字符集合
String: 由中的字符组成的有限序列
空串: ,长度为0的字符串
子串
前缀/后缀
字符串运算
Concatenation: ,和的连接
Reverse: ,字符串的逆序
Length: ,字符串的长度
Power: ,字符串的重复,
Language: 字符串的集合
Kleene star: ,字母表上的所有字符串的集合
Plus: ,字母表上的所有非空字符串的集合
Language 是 的非空子集(可以为)
语言运算
交并减补
Reverse:
Concatenation:
Power:
Star-closure:
Positive-closure:
Deterministic Finite Automata 有限自动机
有限自动机:输入字符串,输出接受/拒绝
两个圆圈的状态表示接受,一个圆圈的状态表示拒绝
箭头为状态转移
DFA:确定性有限自动机,对于每个状态和输入字符,只有一个状态转移
:状态集合
:输入字母表
:状态转移函数,
:初始状态
:接受状态集合
:状态转移函数的扩展,接受多个输入字符
使用 DFA 定义语言:
【必考】 最小化 DFA
核心思想:将状态划分为集合,如果集合内两个状态在任何输入下都是等价的(输出状态所在集合相同),则保持不变,如果不等价,则分开
步骤
初始化:在去除不可达的状态后,将状态划分为接受和拒绝两个集合
找到不等价的状态,划分为新的集合
重复2,直到没有新的划分
时间复杂度:
DFA Bi-Simulation
Bi-Simulation:两个状态的输入输出行为相同,两个 DFA 是等价的
判断步骤
找到两个 DFA 的初始状态作为待检查的状态
对于每一个输入,找到待检查状态转移后的状态,将其加入待检查状态
重复 2 ,直到没有新的状态被加入
所有状态对中,如果两个状态同时为终止状态或同时为非终止状态,则两个 DFA 是等价的
Non-Deterministic Finite Automata 非确定性有限自动机
对于一个输入字符,可以有多个状态转移,只要有一个状态转移成功,就可以接受
允许 转移
定义
( 表示 的幂集,所有的子集)
:从状态开始,所有通过 转移,不消耗其他字符可以到达的状态的集合
状态转移的拓展:匹配完成后,如果还能通过 转移到达其他状态,则将这些状态也加入
使用 NFA 定义语言:
【必考】 DFA 和 NFA 转换
DFA 显然是 NFA 的特例
NFA 可以转换为 DFA
转换步骤:子集构造法
初始化 DFA 的初始状态集合为
对于每一个输入字符,找到所有能到达的转移状态的集合
将加入 DFA 的状态集合,如果转移状态中包含 NFA 的 Final 状态,则加入 DFA 的 Final 状态集合
重复,直到所有状态都被加入
最差时间复杂度:
当 NFA 转换为 DFA 时,规模不一定会减小
最后更新于