INT201-Decision Computation and Language-tutorial2 笔记与思路总结——自动机设计

Tutorial 2 的题只有一页4题, 但是每个都是经典的例题,而且非常基础,想学懂甚至学好这门课这4个题还是要好好弄明白的。

答案直接放在下面,这篇文章主要介绍一个自动机的基本结构——递进结构(个人理解),并且逐题讲解一下。

前言:自动机设计问题,可以抽象理解为一种“判断器” 的设计问题,

举个例子,下面题第三题的Language,可以理解为“一段语言,开头和结尾都是a,同时中间要有两个a”,或者可以理解为“设计一个判断逻辑,判断这段语言是否是开头和结尾都是a,同时中间要有两个a”。再举个例子,例如第二题就要判断一段语言是否是1开头,0结尾。第四题就是要判断语言里是否一定会含有一个“101”片段。

1. 第一题比较简单,要注意的点是如果coin在4以上就要refunds all,也就是清零,回到初始状态,所以在q3和q4要有指回q0的路径。

2. 第二题要注意的是q0时,输入为0的这条路径,因为语段要求1开头,因此0开头的语段是要reject的,因此这条路径可以干脆不写,要写的话要注意给它赋予死循环(q3无论是0还是1都会保持q3)。

3. 第三题这里就要介绍一个自动机的基本结构——递进结构,当然这个结构纯纯是个人理解和总结(可能它有自己的名字,但是我还不知道)。对于此类题,就是存在w1和w2这种不确定长度的word在语言中,应该怎么处理?

可以将自动机的每个状态抽象的理解为一个“阶段”,一般语言的一个字母就对应一个阶段。例如初始q0是一个阶段,他要接受a才行,所以没有b的路径。对于w1来说,它可能有很多个内容,但它也是自己代表一个阶段,这时候就要考虑他什么情况下才能进入下一个状态?换句话说,w1后自动机进入判断状态,开始判断后面是不是有两个a,如果没有就一直返回判断状态前。还记得上面我说可以把状态机理解成一种抽象的“判断器”吗,这时候状态机要判断 “中间是否有两个a” 这个条件了,因此在后面的状态中,如果有一个b存在,那前面判断成功的a都要作废,重新判断,直到找到确定的两个a了,才会进入w2状态。因此在q2阶段如果读取到了b(此时应该已经判断成功了一个a,如果再来一个a条件就满足了,状态机就会自动继续进行进入w2),则说明这个ab都是属于w1的,所以要返回q1状态。

因此就有了此般结构体(字丑,见谅):

 这个结构体意味着w1可以为任意长度,同时w1后面一定要是aa(这个可以根据具体的题来修改)。

再看答案,后面q3代表w2,同样也是需要一个”a+空“才可以F,意思就是语言的结尾是a,如果发现了一个b则代表这个b属于w2,那就返回q3状态重新判断,所以这里也有一个这样的结构体。

 4. 第四题就要强调我上面说的“判断”,这里大家要思考他要求这个语言可以接受101,那为什么上图下方黑色的那个自动机设计为什么不是正确答案呢?这个自动机理应可以接受0和1的任意组合,并且以1结束,这肯定包含了101这种情况,是不是可以胜任第四题要求的自动机?

这个问题的答案是否定的,这也是初学者会出现的一个误解,其实黑颜色的那个自动机并不符合题意,也就是“语言中一定要包含101“,黑颜色的自动机并不能保证这一点,而答案的自动机(红色)可以保证101一定包含在语言中

同时这里要注意第4题是要判断101三个数值,有一个判断错都要返回判断的前的一个状态重新判断(这里是q0,第三题就是q1),因此q2状态下若得到的不是数值1(此时输入了100),就要返回q0状态,再重新等待一个1,直到判断101出现,进入q3状态为止,这就相当于判断了语言中一定存在一段内容是101。还要提到的是因为这个语言长度不限,所以判断101出现后可能还会有其他1和0,那就直接在F状态把它自旋锁死就好。

猜你喜欢

转载自blog.csdn.net/m0_59056870/article/details/126997871
今日推荐