2、2.为下列语言写正规定义: (1)所有不含子串011的0和1的串。 (2)由偶数个0和奇数个1构成的所有0和1的串。

2、2.为下列语言写正规定义: (1)所有不含子串011的0和1的串。 (2)由偶数个0和奇数个1构成的所有0和1的串。


参考答案和解析
(1)用letter表示字母,digit标书数字,则该语言的正规表达式是(_|letter)(letter|digit|_)*对应的右线性文法为:rid表示letter|digit|εid→letter rid|_ridrid→letter rid|digit rid|_rid|ε(2)符号串开头只能是IJKLMN,后面加最多5个字母数字或ε,该语言的正规表达式为:(I|J|K|L|M|N)(letter|digit|ε)5相应的右线性文法如下:id→I rid1|J rid1|K rid1|L rid1|M rid1|N rid1rid1→letter rid2|digit rid2|εrid2→letter rid3|digit rid3|εrid3→letter rid4|digit rid4|εrid5→letter rid5|digit rid5|εrid5→letter|digit|ε

相关考题:

●试题五阅读以下程序说明和C程序,将应填入(n)处的子句,写在答卷纸的对应栏内。【程序说明】函数int commstr(char *str1,char *str2,int *sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。【程序】int strlen(char *s){char *t=s;while(*++);return t-s-1;}intcommstr(char)*str1,char *str2,int *sublen{char*s1,*s2;int count=0,len1,len2,k,j,i,p;len1=strlen(str1);len2=strlen(str2);if(len1len2){s1=str1;s2=str2;}else{len2=len1;s1=str2;s2=str1;}for(j=len2;j0;j--)/*从可能最长子串开始寻找*{for(k=0; (1) =len2;k++)/*k为子串s2的开始位置*/{for(i=0;s1[ (2) ]!='\0';i++;)/* i为子串s1的开始位置*/{/* s1的子串与s2的子串比较*/for(p=0;pj) (3) ;p++);if ( (4) )/*如果两子串相同*/{for(p=0);pj;p++}/*输出子串*/printf("%c",s2[k+p]);printf("\n");count++;/* 计数增1*/}}}if (count0)break;*sublen=(count0)? (5) :0;return count;}

在目标串T〔0..n-1〕=〃xwxxyxy〃中,对模式串P〔0..m-1〕=〃xy〃进行子串定位操作的结果是()。 A、0B、2C、3D、5

●已知文法G[A],它定义的语言描述为糧 (1) 。G[A]:A → 0B|1CB → 1|1A|0BBC → 0|0A|1CC(1) A.G[A]定义的语言由0、1符号串组成,或者串中1的个数是0的个数2倍,或者串中0的个数是1的个数2倍B.G[A]定义的语言由0、l符号串组成,串中0的个数是1的个数2倍C.G[A]定义的语言由0、1符号串组成,串中1的个数是0的个数2倍D.G[A]定义的语言由0、1符号串组成,串中0和1的个数相同

对于求取两个长度为n的字符串的最长公共子序列(LCS)问题,利用(57)策略可以有效地避免子串最长公共子序列的重复计算,得到时间复杂度为O(n2)的正确算法。串<1,0,0,1,0,1,0,1,>和<0,1,0,1,1,0,1,1,>的最长公共子序列的长度为(58)。A.分治B.贪心C.动态规划D.分支一限界

● 正则表达式 1*(0|01)*表示的集合元素的特点是(48) 。(48)A. 长度为奇数的 0、1 串B. 开始和结尾字符必须为 1 的 0、1 串C. 串的长度为偶数的 0、1 串D. 不包含子串 011 的 0、1 串

∑={0,1}上的正规式(0|1)*表示什么()。 A.0开头的串B.1开头的串C.有一个0和一个1的串D.由0、1组成的任意串

阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入对应栏内。【说明】下面流程图的功能是:在已知字符串A中查找特定字符串B,如果存在,则输出B串首字符在A串中的位置,否则输出-1。设串A由n个字符A(0),A(1),…,A(n-1)组成,串B由m个字符B(0),B(1),…,B(m-1)组成,其中n≥m>0。在串A中查找串 B的基本算法如下:从串A的首字符A(0)开始,取子串A(0)A(1)…A(m-1)与串B比较;若不同,则再取子串A(1)A(2)…A(m)与串B比较,依次类推。例如,字符串“CABBRFFD”中存在字符子串“BRF”(输出3),不存在字符子串“RFD”(输出-1)。在流程图中,i用于访问串A中的字符(i=0,1,…,n-1),j用于访问串B中的字符(j=0,1,…,m-1)。在比较A(i)A(i/1)…A(i+m-1)与B(0)B(1)…B(m-1)时,需要对 A(i)与B(0)、A(i+1)与B(1)、…、A(i+j)与B(j)等逐对字符进行比较。若发现不同,则需要取下一个子串进行比较,依此类推。【流程图】

阅读以下程序说明和C程序,将应填入(n)处的子句,写在对应栏内。【程序说明】函数int commstr(char * str1,char * str2,int * sublen)从两已知字符串str1和str2中,找出它们的所有最长的公共子串。如果最长公共子串不止1个,函数将把它们全部找出并输出。约定空串不作为公共子串。函数将最长公共子串的长度送入由参数sublen所指的变量中,并返回字符串str1和str2的最长公共子串的个数。如果字符串str1和str2没有公共子串,约定最长公共子串的个数和最长公共子串的长度均为0。【程序】int strlen(char * s){char *t=s;while( * ++);return t-s-1;}int commstr(char) *str1,char *str2,int *sublen{ char*s1, *s2;int count=0,len1 ,len2,k,j,i,p;len1:=strlen(str1)len2 = strlen(str2);if(len1>len2){s1=str1 ;s2=str2;}else {len2 = len1;s1 = str2;s2 = str1;}for(j=len2;j>0;j--) /*从可能最长子串开始寻找*/{for(k=0;(1)<:len2;k++) /*k为子串s2的开始位置*/{for(i=0;s1[(2)]!='\0';i++;) /*i为子串s1的开始位置*/{ /*s1的子串与s2的子串比较*/for (p=0;p<j)(3);p++);if ((4)) /*如果两子串相同*/{for(p=0);p<j;p++} /*输出子串*/printf ("%c",s2[k+p]);printf ("\n");count++;/*计数增1 */}}}if (count>0) break;*sublen=(count>0)?(5):0;return count;}

下图所示的DFAM,其所接受的语言是(27)。A.{0,1}上含有奇数个0的所有串B.{0,1}上含有奇数个1的所有串C.{0,1}上含有偶数个0的所有串D.{0,1}上含有偶数个1的所有串

已知文法G[A],它定义的语言描述为(39)。 G[A]:A→0B|1C B→1|1A|OBB C→O|OA|lCCA.G[A]定义的语言由0、1符号串组成,串中0和1的个数相同B.G[A]定义的语言由0、1符号串组成,串中0的个数是1的个数2倍C.G[A]定义的语言由0、1符号串组成,串中1的个数是0的个数2倍D.G[A]定义的语言由0、1符号串组成,或者串中1的个数是0的个数2倍,或者串中0的个数是1的个数2倍

已知文法C[A],它定义的语言描述为(1)。 G[A]:A→0B|1C B→1 |1A|0BB C→0 |0A|1CCA.G[A]定义的语言由0、1符号串组成,或者串中1的个数是0的个数2倍,或者串中0的个数是1的个数2倍B.G[A]定义的语言由0、1符号串组成,串中0的个数是1的个数2倍C.G[A]定义的语言由0、1符号串组成,串中1的个数是0的个数2倍D.G[A]定义的语言由0、1符号串组成,串中0和1的个数相同

正则表达式1*(0|01)*表示的集合元素的特点是(48)。A.长度为奇数的0、1串B.开始和结尾字符必须为1的0、1串C.串的长度为偶数的0、1串D.不包含于串011的0、1串

图7-17是一有穷自动机的状态转换图,该自动机所识别语言的特点是(1),等价的正规式为(2)。A.由符号a、b构成且包含偶数个a的串B.由符号a、b构成且开头和结尾符号都为a的串C.由符号a、b构成的任意串D.由符号a、b构成且b的前后必须为a的串

● 某有限自动机的状态图如下图所示,其特点是 (31) 。(31)A. 仅识别以0开始以1结尾的0、1串B. 仅识别含有3个0的0、1串C. 仅识别含有偶数个1的0、1串D. 仅识别以0开始以1结尾且0与1交错出现的0.1串

● 某有限自动机的状态图如下图所示,其特点是 (31) 。(31)A. 仅识别以0开始以1结尾的0、1串B. 仅识别含有3个0的0、1串C. 仅识别含有偶数个1的0、1串D. 仅识别以0开始以1结尾且0与1交错出现的0、1串

已知文法G: S—A0|B1,A- S1|1, B-*S0|0,其中S是开始符号。从S出发可以推导出(12)。A.所有由0构成的字符串B.所有由1构成的字符串C.某些0和1个数相等的字符串D.所有0和1个数不同的字符串

正确表达式1*(0|01)*表示的集合元素的特点是(19)。A.长度为奇数的0、1串B.串的长度为偶数的0、1串C.开始和结尾字符必须为1的0、1串D.不包含子串011的0、1串

阅读以下函数 fun(char *s1,char *s2) { int i=0; while(s1[i]==s2[i]s2[i]!='\0')i++; return(s1[i]=='\0's2[i]=='\0'); } 此函数的功能是A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

在目标串T[0,n-1]=”xwxxyxy”中,对模式串p[0,m-1]=”xy”进行子串定位操作的结果_______A.0B.2C.3D.5

对于求取两个长度为n的字符串的最长公共子序列(LCS)问题,利用(24)策略可以有效地避免子串最长公共子序列的重复计算,得到时间复杂度为O(n2)的正确算法。串 <1,0,0,1,O,1,0,1>和<0,1,0,1,1,0,1,1>的最长公共子序列的长度为(25)。A.分治B.贪心C.动态规划D.分支—限界

某一确定有限自动机(DFA)的状态转换图如图2-1所示,该DFA接受的字符串集是(7),与之等价的正规式是(8)。A.以1开头的二进制代码串组成的集合B.以1结尾的二进制代码串组成的集合C.包含偶数个0的二进制代码串组成的集合D.包含奇数个0的二进制代码串组成的集合

已知文法G: S--AOIBI,A-- S111,B—S0I0,其中S是开始符号。从S出发可以推 导出(12)。A.所有由0构成的字符串B.所有由1构成的字符串C.某些0和1个数相等的字符串D.所有0和1个数不同的字符串

●若正规式为“(1︱01)*0”,则该正规式描述了(28)。(28)A.长度为奇数且仅由字符0和l构成的串B.长度为偶数且仅由字符0和l构成的串C.以0结尾、0不能连续出现且仅由字符0和l构成的串D.以1开始以0结尾且仅由字符0和1构成的串

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】模式匹配是指给定主串t和子串s,在主串t中寻找子串s的过程,其中s称为模式。如果匹配成功,返回s在t中的位置,否则返回-1。KMP算法用next数组对匹配过程进行了优化。KMP算法的伪代码描述如下:1.在串t和串s中,分别设比较的起始下标i=j=0。2.如果串t和串s都还有字符,则循环执行下列操作:(1)如果j=-l或者t[i]=s[j],则将i和j分别加1,继续比较t和s的下一个字符;(2)否则,将j向右滑动到next[j]的位置,即j =next[j]。3.如果s中所有字符均已比较完毕,则返回匹配的起始位置(从1开始);否则返回-1。其中,next数组根据子串s求解。求解next数组的代码已由get_next函数给出。【C代码】(1)常量和变量说明t,s:长度为lt和ls的字符串next:next数组,长度为ls(2)C程序#include #include#include/*求next[]的值*/void get_next( int*next, char *s, int ls) { inti=0,j=-1; next[0]=-1;/*初始化next[0]*/ while(i= ls)return (4) ;else return-1;}【问题1】(8分)根据题干说明,填充C代码中的空(1)~(4).【问题2】(2分)根据题干说明和C代码,分析出kmp算法的时间复杂度为(5)(主串和子串的长度分别为It和Is,用O符号表示)。【问题3】(5分)根据C代码,字符串"BBABBCAC"的next数组元素值为(6)(直接写素值,之间用逗号隔开)。若主串为"AABBCBBABBCACCD",子串为"BBABBCAC",则函数Kmp的返回值是(7)。

已知文法G:S->A0|B1,A->S1|1,B->S0|0,其中S是开始符号。从S出发可以推导出( )?A.所有由0构成的字符串B.所有由1构成的字符串C.某些0和1相等的字符串D.所有0和1个数不同的字符串

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】 模式匹配是指给定主串t和子串s,在主串t中寻找子串s的过程,其中s称为模式。如果匹配成功,返回s在t中的位置,否则返回-1 。 KMP算法用next数组对匹配过程进行了优化。KMP算法的伪代码描述如下: 1.在串t和串s中,分别设比较的起始下标i=j=0。 2.如果串t和串s都还有字符,则循环执行下列操作: (1)如果j=-l或者t[i]=s[j],则将i和j分别加1,继续比较t和s的下一个字符; (2)否则,将j向右滑动到next[j]的位置,即j =next[j]。 3.如果s中所有字符均已比较完毕,则返回匹配的起始位置(从1开始);否则返回-1. 其中,next数组根据子串s求解。求解next数组的代码已由get_next函数给出。【C代码】(1)常量和变量说明 t,s:长度为悯铂Is的字符串 next:next数组,长度为Is(2)C程序#include #include #include /*求next[]的值*/void get_next( int *next, char *s, int Is) { int i=0,j=-1; next[0]=-1;/*初始化next[0]*/ while(i if(j==-1lls[i]==s[j]){/*匹配*/ j++; i++; if( s[i]==s[j]) next[i]= next[j]; else Next[i]= j; }else j = next[j]; }} int kmp( int *next, char *t ,char *s, intlt, int Is ) { Int i=0,j =0 ; while(i if(j==-1 || (2) ){ i++ ; j++ ; }else (3) ;}if (j >= ls)return (4) ;else return -1;} 【问题1】(8分) 根据题干说明,填充C代码中的空(1)~(4).【问题2】(2分)根据题干说明和C代码,分析出kmp算法的时间复杂度为(5)(主串和子串的长度分别为It和Is,用O符号表示)。【问题3】(5分)根据C代码,字符串“BBABBCAC”的next数组元素值为(6)(直接写素值,之间用逗号隔开)。若主串为“AABBCBBABBCACCD”,子串为“BBABBCAC”,则函数Kmp的返回值是(7)。

Σ={0,1}上的正规式(0|1)*表示()。A、0开头的串B、1开头的串C、有一个0和一个1的串D、由0、1组成的任意串

单选题某有限自动机的状态图如图6-3所示,其特点是()。A 仅识别以0开始以1结尾的0、1串B 仅识别含有3个0的0、1串C 仪识别含有偶数个1的0、1串D 仅识别以0开始以1结尾且0与1交错出现的0、1串