第四章 串

  • 格式:doc
  • 大小:89.00 KB
  • 文档页数:16

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章串

一、内容提要

1、是数据元素为字符的线性表,串的定义及操作。

2、串的基本操作,编制算法求串的其它操作。

3、串的存储结构,因串是数据元素为字符的线性表,所以存在“结点大小“的问题。静态和动态(块链结构,堆结构)存储的优缺点。

4、朴素模式匹配算法及改进(KMP)算法。

二、学习重点

1、串的基本操作,编写串的其他操作(如index,replace等)。

2、在串的模式匹配中,求匹配串的nextval 函数值。

3、尽管朴素的模式匹配的时间复杂度是O(m*n), KMP算法是O(m+n),但在一般情况下,前者实际执行时间近似O(m+n),因此至今仍被采用。KMP算法仅在主串与模式串存在许多“部分匹配”时才显得比前者块的多,其主要优点是主串不回嗍。

5、串操作在存储结构下的实现。

三、例题解析

1、利用串的如下基本运算

create(s),assign(s,t),length(s),substr(s,start,len),concat(s1,s2),编写操作replace的算法

replace(string &s,string t, string v)

//本算法实现串的置换操作,用串v置换串s中所有非重叠的t串。

{i=INDEX(s,t);{判s中有无t}

IF (i!=0)

{CREATE (temp, ‘’);{t为临时串变量,存放部分结果}

m=LENGTH(t);n=LENGTH(s);

WHILE (i!=0)

{ ASSIGN (temp,CONCAT(temp,SUBSTR(s,1,i-1),v));

//用v替换t形成部分结果

ASSIGN (s,SUBSTR(s, i+m,n-i-m+1)); //t串以后形成新s串

n= n-(i-1)-m;

i=INDEX(s,t);

}

ASSIGN (s,CONCAT(temp,s)); //将剩余s连接临时串t再赋给s

}

}

int index(string s,string t)

//本算法求串t在串s中的第一次出现。结果是:若t在s中,则给出串t的第一个字符在串s中的位置,若不存在,则返回0

{j=1;m=length(s); n=length(t); eq=true;

WHILE((j<=m-n+1)&& eq )

IF equal(substr(s,j,n),t)

eq=false;

ELSEj=j+1;

IF( j<=m+n-1)return(j);

Return(0);

}

【讨论】本题是用给定的基本操作,编写其它操作的算法。这种类型题较多,必须严格按题的要求来做,不准选择具体存储结构。否则,即使全对,也很难得分。

2 设目标为t=’abcaabbabcabaacbacba’,模式串

p=’abcabaa’;

(1)计算P的NEXTVAL函数值;

(2)不写出算法,只画出利用KMP算法进行模式匹配时每一趟的匹配过程;

【解答】

【讨论】为写NEXTVAL方便,可先写出NEXT函数值,在由此求NEXTVAL.

3、字符串s 满足下式,其中HEAD 和 TAIL的定义同广义表类似,如

HEAD(‘XYZ’)=’X’,TAIL(‘XYZ’)=’YZ’,则

S=concat(head(tail(s)),head(tail(tail(s))))=’dc’

求字符串s。

可供选择的答案是(A) abcd(B) acbd(C) acdb(D) adcb

正确答案是(D)。

四、基本题

(一)选择题

1.下面关于串的的叙述中,哪一个是不正确的?()【北方交通大学 2001 一、5(2分)】

A.串是字符的有限序列B.空串是由空格构成的串

C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储

2若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行

concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,inde x(S2,‘8’),length(S2)))

其结果为()【北方交通大学1999一、5(25/7分)】

A.ABC###G0123B.ABCD###2345C.ABC###G2345D.ABC###2345

E.ABC###G1234F.ABCD###1234G.ABC###01234

3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()

A.求子串B.联接C.匹配D.求串长

【北京邮电大学 2000 二、4(20/8分)】【西安电子科技大学 1996 一、1 (2分)】

4.已知串S=‘aaab’,其Next数组值为()。【西安电子科技大学 1996 一、7 (2分)】

A.0123B.1123C.1231D.1211

5.串‘ababaaababaa’ 的next数组为()。【中山大学 1999 一、7】

A.012345678999 B.012121111212C.011234223456D.0123012322345

6.字符串‘ababaabab’ 的nextval 为()

A.(0,1,0,1,04,1,0,1)B.(0,1,0,1,0,2,1,0,1)

C.(0,1,0,1,0,0,0,1,1)D.(0,1,0,1,0,1,0,1,1 )

【北京邮电大学 1999一、1(2分)】

7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval 数组的值为()。