热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于编译原理的几道问题,高分求救,速来,希望高人指点一下!!!

[刚才手敲的全没了!!!从简问吧1.正规式a*(c+d)+b(c+d)*类似这种的,我不明白,b(c+d)*是意味着b后面可以接c*,d*任意的顺序这个意思吗?2.DFA的状态个数和由这个DFA
[刚才手敲的全没了!!!
从简问吧
1.正规式a*(c+d)+b(c+d)*类似这种的,我不明白,b(c+d)*是意味着b后面可以接c*,d*任意的顺序这个意思吗?
2.DFA的状态个数和由这个DFA确定的语言,假如说是字符串,那么和这个字符串的长度有什么关系?
3.pumping lemma不是很理解,能不能用例子详细解释一下?
比如说DFA有n个状态(n>2),其中不可接收的串集非空,问若令其不可接收的最短串长为k,则k取值范围
A1 b 1 4.下面这题不会啊
let k>=2,let L be the set of strings in {0,1}* such that x属于L if and only if the number of 0's in x is divisible by k and the number of 1's in x is odd.The mimimum number of states in a deterministic finite automaton that recognizes L is 
A k+2 B 2k Cklogk D k平方 E2的k次幂

15 个解决方案

#1


1. (c+d)是c至少一个,后面跟一个d。(c+d)*表示刚才的那个分组可以重复任意次(包括0次)
2. 语言不是字符串,语言是字符串的集合。这个问题意义不明。
3. 如果一个正则语言L的对应的p=5,任何一个大于5的字符串,比如s=aaabbb,存在一个分割s=xyz,比如x=aa,y=ab,z=bb,使得xy^i z都在L里,就是说aabb,aaabbb,aaababbb,aaabababbb……都在L里
pumping lemma最关键是要把命题里的量词搞清楚。这个有助教的话尽量去问助教。面对面的提问解答效率更高。
4. 显然2*k个状态可以做到,然后那个DFA没有等价状态,所以2k就可以。

#2


引用 1 楼 FancyMouse 的回复:
1. (c+d)是c至少一个,后面跟一个d。(c+d)*表示刚才的那个分组可以重复任意次(包括0次)
2. 语言不是字符串,语言是字符串的集合。这个问题意义不明。
3. 如果一个正则语言L的对应的p=5,任何一个大于5的字符串,比如s=aaabbb,存在一个分割s=xyz,比如x=aa,y=ab,z=bb,使得xy^i z都在L里,就是说aabb,aaabbb,aaa……


还是不太理解
1.我觉得解释不对,应该是{b,c}{b,c}{b,c}.....可以是一个b
2.那个语言是字符串的集合,我理解,但是,我的意思是这个表示语言的正则表达式,假设是(0+1)*,或者是第4题那样,那个为什么是2k?什么奇数偶数的和状态有什么关系?3.第三题还是不理解

#3


>b后面可以接c*,d*任意的顺序这个意思
这样是b(c*|d*)
>应该是{b,c}{b,c}{b,c}.....可以是一个b
这样是b(bc)*

我的意思是b, bcd, bcccd, bcdccdccccd。当然前提是我理解这个+是各种正则语法里用的+。如果在你的定义里+是理解成“或”的话那就是另一个故事了。

>那个为什么是2k
自己先把DFA构造出来啊。连DFA都没构造出来这题做个毛啊。

#4


>>b后面可以接c*,d*任意的顺序这个意思
>这样是b(c*|d*)
纠正一下,如果是任意顺序的话那就b(c*|d*)*

#5


1,c+d中的+就是或的意思。理论就要作为理论看。理论中的正则表达式没有“通配符”的概念,所有单一字符的东西都用字母表示。(c+d)*可以看作一串格子,每个格子里面要么是c要么是d,那这一串字符串中的c和d的顺序不就是任意的吗。
2,语言是一组字符串,可以无限多,每一个字符串也可以无限长,只要有循环。一个语言可以对应无穷多DFA,只要里面有循环,每展开一层循环就可以得到一个新DFA,但是总存在一个状态数最少的DFA,这就是DFA的化简。
3,泵引理是说:正则语言总能抽一段中间重复的部分,完了之后剩下的串还是属于这个正则语言。对于a{n}b{n}(a和b分别依次都重复n次),它就不是正则的,因为不管是从中间抽k个a还是k个b,剩下的a和b的数目不一致了,不再是原来那个语言了,它就不是正则的。
4,你在纸上画两个环,每个环有k个状态,k条边,边上的输入都是0。选这两个环之间挨得最近的两个状态,画上来回两条边,边上的输入都是1。这两个状态其中一个是起点,另外一个是终点。这个DFA就画成了。

#6


不好意思,刚才那个第四题的DFA还没画完。那个DFA中的1和0都是聚集在一起的,不是乱序的。不要紧,继续画,只用加边就行了。两个环上顺各自旋转方向找对应点,对应点之间画上来回两条边,边上的输入都是1。

这两个环分别代表奇数个1加k个0的环(终点所在的环)和偶数个1加k个0的环(起点所在的环)。任意一个状态上输入一个1就跳到另一个环上继续转圈。所以每次到终点时,必定把环转了一整圈,并且输入了奇数个1。总共2k个状态,自己画画,应该很直观吧。

#7


引用 6 楼 SonicLing 的回复:
不好意思,刚才那个第四题的DFA还没画完。那个DFA中的1和0都是聚集在一起的,不是乱序的。不要紧,继续画,只用加边就行了。两个环上顺各自旋转方向找对应点,对应点之间画上来回两条边,边上的输入都是1。

这两个环分别代表奇数个1加k个0的环(终点所在的环)和偶数个1加k个0的环(起点所在的环)。任意一个状态上输入一个1就跳到另一个环上继续转圈。所以每次到终点时,必定把……


愚笨的狠,,,不好意思哈,,我不明白什么叫做环上有状态?,有边?

#8


引用 3 楼 FancyMouse 的回复:
>b后面可以接c*,d*任意的顺序这个意思
这样是b(c*|d*)
>应该是{b,c}{b,c}{b,c}.....可以是一个b
这样是b(bc)*

我的意思是b, bcd, bcccd, bcdccdccccd。当然前提是我理解这个+是各种正则语法里用的+。如果在你的定义里+是理解成“或”的话那就是另一个故事了。

>那个为什么是2k
自己先把DFA构……


这道题的DFA怎么画出来?没有正则表达式,只有0,1 的个数,怎么个画法?

#9


引用 7 楼 llyjy21 的回复:
愚笨的狠,,,不好意思哈,,我不明白什么叫做环上有状态?,有边?


k个点、k条有向边,构成一个环,不会画吗?学过数据结构中的图吧?DFA不就是有向图嘛

#10


#11


推荐楼主下载研究一下 LEX+YACC

#12


引用 10 楼 SonicLing 的回复:


似乎有点明白,但是你是怎样一个思路啊?看到这题怎么反应这么快?能把你的思路想法教给我吗?

#13


引用 12 楼 llyjy21 的回复:
引用 10 楼 SonicLing 的回复:

似乎有点明白,但是你是怎样一个思路啊?看到这题怎么反应这么快?能把你的思路想法教给我吗?


这道题最笨的思路是构思一个DFA,就像上面这样,基本无迹可寻,靠经验。其实还有一种有迹可寻,也得靠经验的方法,就是构建正则文法。就是说你要把题意所表达的这个正则表达式换成正则文法,方法是这样的:

题目要的是k个0、odd个1的串,给它起个非终结符名字为k0o1,那么k-10e1就是有k-1个0,even个1,以此类推。从k0o1开始定义。怎么定义呢?先打个草稿:
k0o1 -> 0 have_a_0
      | 1 have_a_1
其中have_a_0/have_a_1是打草稿用的占位符,表示前面已经有一个0了,还是得用上面的规律起正规名字。对于have_a_0来说,前面已经用掉一个0了,剩下肯定是k-10o1(1的数目不变),类似对于have_a_1来说,前面用掉了一个1,剩下就是k0e1(偶数个1),那么第一个定义就是这样的:
k0o1 -> 0  k-10o1
      | 1  k0e1
现在有两个新的符号要定义了,方法和上面一样:
k-10o1 -> 0  k-20o1
        | 1  k-10e1
k0e1   -> 0 k-10e1
        | 1 k0o1
这两个新的符号又引入了两个更新的符号,继续:
k-20o1 -> 0  k-30o1
        | 1  k-20e1
k-10e1 -> 0 k-20e1
        | 1 k-10o1
好了,看出规律没有:有两个规律都指向同一个结论:
1. 每展开一轮增加2个新符号,如果k是个有限的数的话,最后会展开为2k个符号。
2. 用j代表1~k中任意一个数,终结符的符号规律是j0e1或者j0o1,总共有2k个符号。

现在把这个正则文法转换成DFA,很简单,每一行是一条迁移,0和1做边,非终结符做状态,总共4k条边,2k个状态。
     

#14


至于为什么一上来打草稿就可以写出

k0o1 -> 0 have_a_0
      | 1 have_a_1

这种格式?这就是递归的思路了。这个思路就是:k0o1代表了一个语言,这个语言由0或1随意重复而成。那么:将k0o1所代表的这个语言从头部拿掉一个0或者一个1,剩下的语言(have_a_0/have_a_1)还是正则语言,那它们的规律是什么?它们又如何定义?

规律就是k个0拿掉一个剩k-1个,奇数个0拿掉一个剩偶数个。
定义的方法就是再拿掉一个0或者1,看还能剩下什么(递归)。

#15


引用 14 楼 SonicLing 的回复:
至于为什么一上来打草稿就可以写出

k0o1 -> 0 have_a_0
      | 1 have_a_1

这种格式?这就是递归的思路了。这个思路就是:k0o1代表了一个语言,这个语言由0或1随意重复而成。那么:将k0o1所代表的这个语言从头部拿掉一个0或者一个1,剩下的语言(have_a_0/have_a_1)还是正则语言,那它们的规律是什么?它们又如何……


谢谢,但是对于快速答题来说,这个方法太麻烦,我一时想不到,不过,还是很感谢你

推荐阅读
  • Python正则表达式(Python RegEx)
    Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • c语言二元插值,二维线性插值c语言
    c语言二元插值,二维线性插值c语言 ... [详细]
  • 探讨一个有趣的Java代码片段,分析 ((NULL)null).say() 是否能够正常执行。 ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
  • 编译原理中的语法分析方法探讨
    本文探讨了在编译原理课程中遇到的复杂文法问题,特别是当使用SLR(1)文法时遇到的多重规约与移进冲突。文章讨论了可能的解决策略,包括递归下降解析、运算符优先级解析等,并提供了相关示例。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 如何处理PHP缺少扩展的问题
    本文将详细介绍如何解决PHP环境中缺少扩展的问题,包括检查当前环境、修改配置文件以及验证修改是否生效的具体步骤,帮助开发者更好地管理和使用PHP扩展。 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • Spring Boot与Graylog集成实现微服务日志聚合与分析
    本文介绍了如何在Graylog中配置输入源,并详细说明了Spring Boot项目中集成Graylog的日志聚合和分析方法,包括logback.xml的多环境配置。 ... [详细]
  • URL参数格式http:localhos:8080demo?ab&cd&ef匹配参数a对应的表达式为^a([^&]*)&匹配参数b对应的表达式为&b([^&]*)&匹配参数c对应 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
author-avatar
QJ974
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有