【软考】——有限自动机

版权声明:希望各位能遵守各自内心的原则 https://blog.csdn.net/weixin_40918067/article/details/81540839

我想写什么?对软考的知识的了解;
那今天就写下有限自动机的知识吧;

有限自动机的基本概念

其实有限自动机也就分为两种(我的知识层面仅仅了解到这里):
一种是:确定的有限自动机(简称:DFA);另一种是不确定的有限自动机(简称:NFA);

有限自动机也就是一种识别装置的抽象概念,用于识别正规集;而正规集是3型文法(正规文法)或正规表达式描述词法规则并产生集合的一个子集;

这里写图片描述

一个确定的有限自动机是一个五元组(S,∑,f,So,Z)其中:
S是一个有限状态集合;
∑是一个字母表,输入字符的集合;
f是S*∑ —>S的字集映照;
So是唯一的初态,So∈S
Z是一个终态集,Z⊆S;

这里写图片描述

一个不确定的有限自动机是一个五元组(S,∑,f,So,Z)其中:
S是一个有限状态集合;
∑是一个字母表,输入字符的集合;
f是S*∑ —>S的字集映照;
So是一个非空初态集,So⊆S
Z是一个终态集,Z⊆S;

显然,DFA是NFA的特例,实际上,每个NFA M,都存在一个DFA N,并且L(M) = L(N);对于任何的两个有限自动机M1M2,如果L(M1) = L(M2),则称M1M2等价的;
其实确定的有限自动机(DFA)和不确定的有限自动机(NFA)的本质区别也就是初态是否是一个集合

那我们该用啥来表示DFA和NFA呢?讲了大半天,我还停留在对有限自动机的概念讲解中;
其实我仅仅会使用两种表达式表示有限自动机:一种是状态转换图(简称:转换图),另一种是状态转换矩阵;

状态图:是一个有向图,其中的每一个节点(一个圆圈)代表一个状态,双圈是终态状态,其中的每一个有向弧对应着一个转换函数;

那么软考考哪些知识:

1、有限自动机识别字符串
也就是依次输入字符串中的字符,然后判断其是否能使用有限自动机从初态开始到终态结束;如果能,则该字符串可以被识别

2、用状态图表示的NFA,要求NFA转换为DFA并求DFA的最简DFA形式

这里写图片描述

第一步:根据上面的状态图写出状态转换表,状态转换表也就是状态转换图的另一种表示形式;如下图,左侧的表头(0~9)为状态,上方表头为条件;其余部分为后继状态

这里写图片描述

提示:为的0节点(初态)没有通过a、b转换函数来连接其他的状态,但通过ε转换函数来连接其他节点(其他的状态:1,7)

第二步:求ε_CLOSURE(s);
其中ε_CLOSURE(s)是指由状态s经由条件ε可到达的所有状态的集合;
ε_CLOSURE(0)={0,1,2,4,7}

ε_CLOSURE(1)={1,2,4}

ε_CLOSURE(2)={2}

ε_CLOSURE(3)={1,2,3,4,6,7}

ε_CLOSURE(4)={4}

ε_CLOSURE(5)={1,2,4,5,6,7}

ε_CLOSURE(6)={1,2,4,6,7}

ε_CLOSURE(7)={7}

ε_CLOSURE(8)={8}

ε_CLOSURE(9)={9}

什么,没有明白为什么要这样来转换;
我通过ε_CLOSURE(s)来表示集合,这是为了下一步把初态集合转变为一个节点(DFA和NFA的本质区别);

第三步:也就是关键的一步:转换
首先将初始态的转换闭包ε_CLOSURE(0)设为节点A(状态),即A={0,1,2,4,7},注意这里的节点A并不是上面状态图的节点;而是新建状态图的节点;

接着写出状态A经过上面状态图中所有条件而得到的状态,后继状态不包括自身;这里的转换条件是a和b;
注意:这里不包括ε,因为转换的一个目的就是消除ε;

ε_CLOSURE(0) = A;

ε_CLOSURE(move(A,a)) = ε_CLOSURE({3,8}) = {1,2,3,4,6,7,8} = B

ε_CLOSURE(move(A,b)) = ε_CLOSURE(5) = {1,2,4,5,6,7} = C

ε_CLOSURE(move(B,a)) = ε_CLOSURE({ 3,8 }) = {1,2,3,4,6,7,8} = B

ε_CLOSURE(move(B,b)) = ε_CLOSURE({5,9}) = {1,2,4,5,6,7,9} = D

ε_CLOSURE(move(C,a)) = ε_CLOSURE()

ε_CLOSURE(move(C,b))

ε_CLOSURE(move(D,a)) = ε_CLOSURE({3,8}) = {1,2,3,4,6,7,8} = B

ε_CLOSURE(move(D,b)) = ε_CLOSURE(5) = {1,2,4,5,6,7} = C

提示:
这里的move(A,a) = ε_CLOSURE({3,8}) 是因为上面的状态转换表中的a列除了Φ,就仅剩这些数字;
而move(A,a) = {1,2,3,4,6,7,8} ,其中move(A,a)表示指由状态A经由条件a可到达的所有状态的集合
而得出{1,2,3,4,6,7,8}是因为从旧的状态图中的初态出发并仅能通过规定的转换函数(a、ε)的路线

第四步:画出DFA状态转换表(每一个状态只有一个后继状态)

这里写图片描述

第五步:画出DFA状态图

这里写图片描述

把NFA转换为DFA,其本质也就是把多个状态通过一定的条件变成一个集合;

第六步:求DFA最小化
(1)消除多余状态
1)、什么是多余状态
从这个状态出发没有通路到达终态
从开始终态出发,任何输入串也不能到达的那个状态
2)、如何消除多余状态

这里写图片描述
(2)等价状态
1)、什么是等价状态,对于两个状态s和t
一致性条件:状态s和t必须同时为终态或非终态
蔓延性条件:对于所有输入符号,状态s和t必须转化到等价的状态里
这里写图片描述
接下来是关于如何利用上面的两个条件来判断是否为等价状态,那就来一张比较复杂的状态转换图吧,是不是有点晕了,哈哈!!!
这里写图片描述
首先是画出状态转换表;
这里写图片描述
提示:
1、看1和2,1和2都是非终态,满足条件1;1和2都可以转换成状态2,满足条件2;那就可以将两者合并(1和2);
1、看6和7,6和7都是非终态,满足条件1;1和2都可以转换成状态2,满足条件2;那就可以将两者合并(6和7);
以此类推,2和5也会合并;记住最后的结果只有一种,只要满足合并后的状态最少就行;
这里写图片描述
转化
1,2—>A
3,4—>B
5—>C
6,7—>D
列出转化后的状态转换表
这里写图片描述
再画出相应的状态转换图就大功告成啦!
这里写图片描述
3、有限自动机与正规式之间的转换
正规式与正规集示例
这里写图片描述
1)、有限自动机转换为正规式
这里写图片描述
2)、正规式转换为有限自动机
这里写图片描述
4、给出NFA、DFA或最简DFA,要求给出其对应的正规式
5、给出正规集,要求给出其对应的DFA
6、给出用自然语言描述的正规集,要求给出其对应的正规式表示形式

猜你喜欢

转载自blog.csdn.net/weixin_40918067/article/details/81540839