编译原理:构造最小化DFA M

本文介绍了如何通过正则表达式构建NFA并转化为最小化DFA,详细描述了化简确定有穷自动机的步骤,以一个示例说明了整个过程,并给出了右线性文法的构建方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译原理:构造最小化DFA M

DFA,全称是Deterministic Finite Automaton,即确定有穷自动机;还有一种叫NFA,全称Nondeterministic Finite Automata,即非确定有限自动机。

如何由正则表达式转换成DFA呢?—>转换系统:一个具有唯一开始状态S和唯一最终状态Z的一个NFA—>再转化成DFA

下面是一些正规表达式对应的转化系统

在这里插入图片描述

化简确定的有穷自动机步骤

1.将DFA M的状态集Q分成两个子集:终态集F和非终态集﹣F,形成初始分划∏。

2.对∏使用如下方法建立新分划∏NEW:
对∏的每个状态子集G:
​ (1)把G分划成新的子集,使得G的两个状态s和t属于同一子集,当且仅当对任何输入符号a,状态s和t转换到的状态都属于∏的同一子集。

​ (2)用G分划出的所有新子集替换G,形成新的分划∏NEW;

3.如果∏NEW=∏,则执行第四步;否则令∏=∏NEW,重复第二步。

4.分划结束后,对分划中的每个状态子集,选出一个状态作代表,而删去其它一切等价的状态,并把射向其它状态的箭弧改为射向这个作为代表的状态。

下面通过一道例题讲述如何构造最小化DFA M

题:设字母表∑={a,b},给出∑的正规式R=b*ab(b|ab)*

​ 1.试构造状态最小化DFA M,使得L(M)=L®

​ 2.求右线性文法使得L(G)=L(M)

(1)解:

1)首先根据正规式,和正规式对应的转化系统构造出NFA

在这里插入图片描述

2)NFA—>DFA

IIaIb
1{S,3,1}{4}{3,1}
2{4}Ø{2,5,Z}
3{3,1}{4}{3,1}
4{2,5,Z}{6}{5,Z}
5{6}Ø{5,Z}
6{5,Z}{6}{5,Z}

Ia,Ib判断,第一次经过路径必须是a(b)其次是全为ε的路径,然后再对里面的每个字符依次进行判断

I的判断,从开始符号一直经过ε的路径

通过表格构建出DFA图(对应)

在这里插入图片描述

(终结状态判断是该子集I中含有终结字符,本题中4,6的子集I中含有终结字符Z,所以是终结状态)

3)DFA最小化

∏={{1,2,3,5},{4,6}}

{1,2,3,5}a={2,Ø,2,Ø} #Ø不属于上一个∏的任何一个子集中所有可以将{2,5}重新划分子集构建∏NEW

∏={{1,3},{2,5},{4,6}}

{1,3}a={2} {1,3}b={3} {2,5}a=Ø {2,5}b={4,6} #{4,6}属于同一子集不需要划分新子集)

{4,6}a={5} {4,6}b={6}

画出图表(表中将子集简化将{1,3}写成1,以此类推)

在这里插入图片描述
(2)解:

由于初始状态只有箭弧引出、无箭弧引入,终止状态只有箭弧引入、没有箭弧引出,所有对于上述4我们需要稍微改进一下,引入另一个终结符号Z为终止状态,并且通过ε链接C*(为方便书写此处将1,2,4替换成A,B,C)*和Z因此该题的右线性文法为

在这里插入图片描述

定义:
A—>bA|aB
B—>bC
C—>aB|bC|ε
推导:
A—>bA|aB
B—>bC
C—>aB|bC|b

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值