正则语言的性质与DFA优化
掌握泵引理判定法、Myhill-Nerode刻画与DFA极小化算法
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
正则语言的性质与DFA优化
掌握泵引理判定法、Myhill-Nerode刻画与DFA极小化算法
正则语言研究的基本问题
给你一段正则表达式 / 一个 DFA,比如匹配邮箱的模式。光认识它能匹配什么还不够——你想问几个更基本的问题:它到底匹不匹得到东西?两个版本是不是一回事?
出货吗(非空)、种类有限吗(可数)、两台等价吗(等价)、A货B都能出吗(包含)
泵引理的思想来源
DFA 状态数有限,但语言中的串可以任意长。读足够长的串时,状态序列必然出现重复——这一重复就是泵引理最朴素的思想源头。
步数超过房间数,必重复进入某房间;两次进房之间那段路可无限重走
泵引理的正式表述
上页我们直观感受到:串长到一定程度,中间一定能拆出一段重复也不破坏语言。这一页把这种直觉写成定理——四个要素缺一不可。
前 p 长度内有可伸缩段 y;y 重复任意次,橡皮筋仍是同一规格
泵引理的应用步骤
用泵引理证伪一个语言分四步,本质是反证法的推演。
判定实例:anbn不是正则
按箭头方向读:从反证假设出发,依次走泵引理的分裂、约束、泵出,推出矛盾。
复杂判定:质数个数语言
质数长度语言是泵引理证明中的经典陷阱——"泵一次就不是质数"看似显然,实则藏着对引理结构的误解。
- 随手选短串(如 a²、a³),泵不出矛盾
- 默认 y 从字符串开头切,忽视任意切分
- 断言 p+1 必为合数,但 2+1=3 仍是素数
- 测试串取 aᵖ,p 取大于泵长且为素数
- 分解须覆盖 |xy|≤p 内所有合法切分
- 取 i=p+1,泵后长度 = p(1+|y|),必合
小测:判断语言是否正则
对于语言 L = {aⁿbⁿ | n ≥ 1},下列哪个结论正确?
为什么需要优化DFA
冗余状态增加存储与计算成本
可区分与不可区分状态
DFA要减肥,关键在于识别出"表现完全一致"的状态——这就是可区分性要回答的问题。
所有考试题答案一致则视为同一人,对应任何输入串结果相同则等价
最小化算法:分割法
表驱动算法通过反复细分割,逐步定位所有等价状态对。
算法演示:具体DFA最小化
分步图解表格法执行过程
优化前后对比
最小化前后DFA接受同一语言,但状态数与结构复杂度天差地别。
- 状态数偏多,存在等价冗余
- 等价状态未合并,结构臃肿
- 等价性分析计算量更大
- 分割法收敛需更多轮迭代
- 状态数降至最少,无冗余
- 等价状态已合并,结构最简
- 状态数减少,分析更高效
- 一次到位即达不动点
本节要点回顾
- ✓泵引理是必要条件,能否定却不能肯定
- ✓最小化DFA的核心:合并不可区分状态
- ✓可区分状态对任何输入都会分离
- ✓分割法迭代到不动点即得最简机器
- ✓正则语言对并、连接、闭包运算封闭
课后思考
先遮住参考答案,把三个问题当作业做;卡住再翻下面的提示。
参考答案|xy| ≤ p 锁死泵点位置,让对手无法把「破坏点」藏到串的后段。去掉后泵点可任意分布,构造不出与原串矛盾的泵入结果。
参考答案非正则。取 s = 0^p 1^p 0^p;|xy| ≤ p 把 v 限定在首段 0^p 内,泵入后首段 0 数增多而中末段不变,三段不再等长。
参考答案Mealy 机的等价需满足「对任意输入序列输出序列相同」。分割法仍可用,但要把每个转移的输出纳入比较,等价类判定条件比 DFA 多一维。