热门标签 | 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)还是正则语言,那它们的规律是什么?它们又如何……


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

推荐阅读
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 解析SQL查询结果的排序问题及其解决方案
    本文探讨了为什么某些SQL查询返回的数据集未能按预期顺序排列,并提供了详细的解决方案,帮助开发者理解并解决这一常见问题。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Ihaveastringwithquotesaroundthepathasfollows:我在路径周围有一个带引号的字符串,如下所示:C:\ProgramFiles(x ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 异常要理解Java异常处理是如何工作的,需要掌握一下三种异常类型:检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常ÿ ... [详细]
  • 在进行QT交叉编译时,可能会遇到与目标架构不匹配的宏定义问题。例如,当为ARM或MIPS架构编译时,需要确保使用正确的宏(如QT_ARCH_ARM或QT_ARCH_MIPS),而不是默认的QT_ARCH_I386。本文将详细介绍如何正确配置编译环境以避免此类错误。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了如何在Hive(基于Hadoop)环境中编写类似SQL的语句,以去除字段中的空格。特别是在处理邮政编码等数据时,去除特定位置的空格是常见的需求。 ... [详细]
  • 本文介绍如何在Java中实现一个罗马数字计算器,重点在于如何通过循环和字符验证确保用户输入合法。我们将探讨创建一个方法来检查字符串中的非法字符,并使用循环不断提示用户输入,直到输入符合要求。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文详细介绍了C++中map容器的多种删除和交换操作,包括clear、erase、swap、extract和merge方法,并提供了完整的代码示例。 ... [详细]
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社区 版权所有