工学

判断题KMP算注的最大特点是指示主串的指针不需回溯。A 对B 错

题目
判断题
KMP算注的最大特点是指示主串的指针不需回溯。
A

B

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

fscanf函数的正确调用形式是A.fscanf(文件指针,格式字符串,输出表列); B.fscanf(格式字符串,输出表列,文件指针);C.fscanf(格式字符串,文件指针,输出表列); D.fscanf(文件指针,格式字符串,输入表列);


正确答案:D
本题主要考查fscanf函数的调用形式。fscanf函数与scanf函数类似,都是格式化输入函数,它们不同的地方是:fscanf函数输入的对象不是终端,而是磁盘文件,函数的调用格式为:
          fscanf(文件指针,格式字符串,输入表列)
其中文件指针指向待操作的磁盘文件,而格式字符串描述的是输入内容的格式,输入列表描述的是与输入格式对应的输入元素,输入列表中可以有多个输入元素。

第2题:

在字符串的KMP模式匹配算法中,需先求解模式串的next函数值,其定义如下式所示,j表示模式串中字符的序号(从1开始)。若模式串p为“abaac”,则其next函数值为 (60) 。

A.01234

B.01122

C.01211

D.01111


正确答案:B
本题考查字符串的模式匹配运算知识。KMP是进行字符串模式匹配运算效率较高的算法。根据对next函数的定义,模式串前两个字符的next值为0、1。对于第3个字符“a”,其在模式串中的前缀为“ab”从该子串找不出前缀和后缀相同的部分,因此,根据定义,该位置字符的next值为1。对于第4个字符“a”,其在模式串中的前缀为“aba”,该子串只有长度为l的前缀“a”和后缀“a”相同,根据定义,该位置字符的next值为2。对于第5个字符“a”,其在模式串中的前缀为“abaa”,该子串只有长度为1的前缀“a”和后缀“a”相同,根据定义,该位置字符的next值为2。综上可得,模式串“abaac”的next函数值为01122。

第3题:

已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next和nextval函数值。


参考答案:
  模式串t的next和nextval值如下:
  

第4题:

阅读下列说明和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 < ls){/*还有字符*/
if(j==-1l
ls[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, int
lt, int Is )
{
Int i=
0,j =0 ;
while
(i < lt && (1) ){
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)。


答案:
解析:
【问题1】(8分)答:(1):j
【问题2】(2分)答:(5)O(ls+lt)

【问题3】(5分)答:(6)[-1, -1,1, -1, -1, 2, 0, 0](7)6

第5题:

在字符串的KMP模式匹配算法中,需先求解模式串的next函数值,其定义如下式所示,j表示模式串中字符的序号(从1开始)。若模式串p为"abaac",则其next函数值为 ( ) 。

A.01234
B.01122
C.01211
D.01111

答案:B
解析:
根据公式依次推导即可。

第6题:

●在KMP模式匹配算法中,需要求解模式串p的next函数值,其定义如下(其中,j为模式串中字符的序号)。对于模式串“abaabaca”,其next函数值序列为(57)。

(57)

A. 01111111

B.01122341

C.01234567

D.01122334


正确答案:B

第7题:

阅读下列说明和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){/*还有字符*/ 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, int lt, int ls ) { Inti= 0,j =0 ; while(i < lt && (1) ){ 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)。


答案:
解析:
【问题1】
(1):j (2):t[i]==s[j];
(3):get_next(next, s, ls);
j=next[j];
(4):i+1-ls;
【问题2】(2分)
(5)O(ls+lt)
【问题3】
(6)[-1, -1,1, -1, -1, 2, 0, 0],
(7)6

第8题:

旋翼式系列和螺翼式系列产品的表头基本形式是()式。

A.瞬时指示

B.独立运算

C.积算

D.指针


参考答案:C

第9题:

KMP算法的特点是在模式匹配时指示主串的指针()。

A.不会变大
B.不会变小
C.都有可能
D.无法判断

答案:B
解析:
在KMP算法中,模式匹配时主串不会回溯,所以主串的指针不会变小。

第10题:

对拱桥进行承载能力检算评定,主要检算内容应包括( )。

A、主拱圈的最大轴力和弯矩
B、桥面板最大剪力
C、主拱圈稳定性
D、立柱抗剪

答案:A,C,D
解析:
拱桥承载能力检算的主要内容除选项ACD外,还有桥面板局部强度。