当前课程知识点:软件理论基础 > 第六章 正则语言的性质与DFA优化 > 6.6 DFA的优化 2 > Video
欢迎同学们来到《软件理论基础》的MOOC课堂
现在继续介绍DFA优化的最后一个部分
就是最优的DFA
在上一讲里面我们介绍了
DFA状态集上面的一个等价关系r
以及这个等价关系r
它的实现的算法 填表法
那我们根据这样的等价关系
以及这样的算法
怎么对DFA做优化呢
那下面我们介绍这个优化的步骤
我们就这样
首先删除这个DFA当中
从初态不可到达的所有的状态
当然这些状态 大家看
肯定是(01:11)的
因为它绝对不会产生语言的
这样我们得到了一个新的DFA
都是从初态可以到达的
假设这个DFA就是a
第二步 我们就用刚才定义的填表算法
找出这个状态集当中
所有的等价的状态偶对
就是根据填表法
第三步 我们根据这样找出的第二步
找出的所有的等价的状态偶对
就得到了它那些等价类
也就是状态集合的一个划分
这个划分就是我们所需要的
对每一个等价类或者每一个块
我们看作是一个状态
那这样在一个块当中的所有的状态
它是等价的
不同块当中的状态它是不等价的
那么等价的用前面介绍的方法
就是用这个记号来表示
它的等价类或者块
那根据这样我们就可以构造一个
跟DFA这个A等价的
一个新的自动机B
这个B的状态级用QB表示
这个QB就是
我们所有的等价类构成的集合
也就是一种∑级
δB也就是状态转移
状态转移我们定义了按这种方法
来定义状态转移
q0也就是初始状态等价类
FB是我们接受状态构成的等价类
那这样我们就把原来的这个DFA
就得到新的一个自动机B
这个新的自动机状态级是QB
QB是由所有等价类构成的
那它的状态个数的话
那一般来说它比原来的状态q应该少
我们首先看一个例子
这个例子
就是我们刚才介绍的那个自动机
有七个状态
刚才用填表法得到了等价的偶对有1、2
和6、7
也就是对7个状态进行划分
就得到的结果是这样5个类
我们按5个类构造了新的自动机
这个自动机跟这个自动机它的状态要少
但是它们的语言完全是相同的
大家可以验证
这就是我们利用填表法
对自动机状态做的优化
那利用填表法我们可以对DFA做优化
下面我们有个问题
你这里填表法是对原来的DFA做了优化
得到了自动机
这个自动机的状态Qm
是不是状态数最少的那种自动机
也就是说是不是还存在一个另外一个DFA
这个DFA它跟你的A是等价的
但是状态数比你这个Qm还少
如果说还有这样的自动机的话
那你就说你这个优化
还没达到最优的这种程度
下面我们证明了这种是不可能的
假设存在一个DFA
就是我们刚才说的假设这个DFA是n
它的状态是qn
这个DFA它的语言
跟原来的那个A 或者跟M
它是相同的
但是它的状态数比M要少
假设有这样的自动机
我们说会有什么结果
当然我们为了证明这个不可能
我们首先在这里做一些准备
首先我们假定M和N
它们之间没有重名的状态
这个状态命名嘛是你自己给定的
这跟语言没什么关系
另外 我们假设M和N每个状态
都是从初态可达的
我们首先做这类处理之后
下面我们构造一个叫并自动机M并 N
那个并自动机
实际上是状态级 它们之间并
还有状态转移它们之间并
这个我们打引号的实际上
就是在各个不同的自动机
它使用不同转移
初始状态 你要么写Qn的初始状态
要么写Qm初始状态
那么终态要把它们并起来
实际上这个并自动机
我们在上一讲里面讲语言的等价时候
我们已经介绍过这个并自动机
那我们对M和N进行刚才的这个并之后
我们就可以得出这个结论
首先是M和N的初态是不可分的
为什么 大家想一想
因为我们在那个填表法里面
我们定义了那个关系R
关系R是要么是同时到达终态
要么是它们都不达到终态
M和N它们两个语言是相同的
语言相同那就是对任何的串
要么从初态它们都能到终态
要么都到达不了终态
所以我们得出M和N的初态是不可分的
那接下来我们说假如p和q是不可区分的
那它们的后继状态也是不可区分的
这个根据我们填表法的归纳
我们马上可以得到这个结论
结论A和B
我们就推出了第三个结论
就是M的任意的一个状态
它就与N它当中一个状态是不可区分的
为什么 大家可以想一想
因为M的状态
我们假定是跟N的状态要多
那我们就得出M当中至少有两个状态
这个N当中一个状态是不可区分的
那根据不可区分的
它们具有传递性 就得出了M当中
至少有两个状态它是不可区分的
那这得出什么
因为M是填表法 它构造出来的
这不就矛盾了
这个矛盾就说明你刚才假定的
另外的一个DFAN状态数比M还少的
这是不存在的
所以我们证明了用填表法得到的这个DFA
他是一个最优的DFA
这就是我们得到了这个结论
那刚才我们举了一个例子
把七个状态通过优化
我们优化了有两个状态
只得了它五个等价类
可能有的同学对我们刚才填表法
就说你七个状态只优化了两个
好像这个力度不是很大
下面我们介绍几个例子
首先看这个例子
这是这样的语言 它的输入字母是0和1
0、1当中的奇偶性是相同的
也就是说0它的个数是奇数的话
1的个数是奇数
0的个数是偶数的话
1的个数是偶数
这样的话是被接受的
这个语言我们之前已经讲过
它的自动机是由四个状态构成的
那这个自动机我们用填表法
就可以容易的对它进行优化
这个优化就得到了
这个自动机实际上是两个状态就可以了
这是四个状态优化成两个
这说明这个优化的力度达到了50%
下面我们再介绍一个比这个例子
更复杂的一个例子
这个例子实际上是在之前第二章
我们已经讲过的例子
这个给了一个DFA是这样的
它的语言是输入字母是0、1
W当中它的长度
它不超过3的任意子串
最多只包含一个1
我们当时画这个自动机的时候
我们画的费了很大劲
实际上得到的自动机是这样的
它实际上有16个状态 有30多个变迁
像这样的自动机 肯定有融入状态
我们变迁怎么做优化
我们就按刚才的填表法
这个自动机把它的状态列出来
这个状态就得到了
它所有的状态得到是这样的
那我们填表法就得到
它们可区分的打XX的
没可区分的 你看都是没打XX的
那对这样的填表法
得到的最后的结果是什么呢
也是对这个自动机我们最后做优化
跟它等价的自动机就是这样的自动机
再看这个自动机只有四个状态
那比刚才这自动机它的状态数
你看减少了多少
从这个例子可以看出
我们填表法在使用的时候
在有些DFA里面是非常有效的
今天我们介绍了DFA的一些优化
定义了DFA状态上面的一个等价关系
以及实现这个等价关系的算法 填表法
而且我们证明了用这种方法
能够对DFA达到它的最优的程度
好 我们这节内容介绍完毕
谢谢大家
-1.1 概要
--第一节
-1.2 数学基础
--Video
-1.3 图
--Video
-1.4 证明方法
--Video
-1.5 语言基础
--Video
-1.6 语言运算
--Video
-习题--作业
-2.1 确定有限自动机的概念
--Video
-2.2 确定有限自动机的定义
--Video
-2.3 扩展转移函数
--Video
-2.4 正则语言
--Video
-2.5 DFA构造
--Video
-习题--作业
-3.1 非确定有限自动机的概念
--Video
-3.2 e转移
--Video
-3.3 非确定有限自动机的定义
--Video
-3.4 扩展转移函数
--Video
-3.5 等价性证明
--Video
-3.6 文本搜索
--Video
-习题--作业
-4.1 单一终结状态的NFA
--Video
-4.2 正则语言的运算性质
--Video
-4.3 正则表示和语言
--Video
-4.4 正则表示和正则语言
--Video
-4.5 正则语言的同态
--Video
-4.6 正则表示的代数定律
--Video
-习题--作业
-5.1 文法
--Video
-5.2 线性文法
--Video
-5.3 正则文法与正则语言
--Video
-5.4 自动机的积
--Video
-习题--作业
-6.1 基本问题
--Video
-6.2 泵引理
--Video
-6.3 非正则语言的判定 1
--Video
-6.4 非正则语言的判定 2
--Video
-6.5 DFA的优化 1
--Video
-6.6 DFA的优化 2
--Video
-习题--作业
-7.1 上下文无关文法
--Video
-7.2 规约和推导
--Video
-7.3 语法分析树
--Video
-7.4 规约、推导和语法分析树之间的关系
--Video
-7.5 上下文无关语言
--Video
-习题--作业
-8.1 CFG的应用
--Video
-8.2 CFG的转化
--Video
-8.3 文法二义性
--Video
-8.4 二义性的消除方法
--Video
-8.5 CFG的构造方法
--Video
-8.6 CFG的构造实例
--Video
-第八章 CFG的应用与文法的二义性--习题
-9.1 PDA介绍
--Video
-9.2 PDA的定义
--Video
-9.3 PDA的即时描述
--Video
-9.4 PDA的语言
--Video
-9.5 PDA与CFG的关系
--Video
-习题--作业
-10.1 确定下推自动机
--Video
-10.2 DPDA与其他语言的关系
--Video
-10.3 终态型DPDA和空栈型DPDA
--Video
-10.4 消除无用符号
--Video
-10.5 消除e产生式
--Video
-10.6 消除单一产生式
--Video
-10.7 CFG的化简与Chomsky范式
--Video
-习题--作业
-11.1 CFL的必要条件
--Video
-11.2 CFL的Pumping引理
--Video
-11.3 CFL的闭运算性质
--Video
-11.4 CFL的同态性质
--Video
-11.5 CFL的交运算
--Video
-11.6 CFL的判定性质
--Video
-习题--作业
-12.1 图灵机的介绍
--Video
-12.2 图灵机的定义
--Video
-12.3 图灵机的即时描述
--Video
-12.4 图灵机的计算
--Video
-12.5 图灵机的编程技术
--Video
-习题--作业
-13.1 Turing理论
--Video
-13.2 图灵机带的扩展
--Video
-13.3 图灵机移动的扩展
--Video
-13.4 受限图灵机
--Video
-13.5 图灵机与其他自动机
--Video
-习题--作业
-14.1 图灵机编码
--Video
-14.2 对角线语言与通用语言
--Video
-14.3 图灵机语言的性质
--Video
-14.4 判定问题和语言
--Video
-14.5 计算复杂性问题
--Video
-第十四章 不可判定问题--习题
-15.1 时间自动机
--Video
-15.2 Buchi自动机
--Video
-15.3 软件形式化验证
--Video
-15.4 模型检测方法
--Video
-15.5 M3C模型检测系统
--Video
-习题--作业
-期中考试