全国硕士研究生招生考试计算机科学与技术学科联考计算机学科专业基础综合(408)数据结构考点归纳与典型题(含历年真题)详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 典型题(含历年真题)详解

一、单项选择题

1下列程常段的时间复杂度是(  )。[2014年联考真题]

A.O(log2n)

B.O(n)

C.O(nlog2n)

D.O(n2

【答案】C

【解析】外部循环的退出条件是k>n,而对于k,每次循环都执行k=k*2,所以循环次数为log2n;内部循环的退出条件是j>n,对于j,每次循环都执行j=j+1,所以每次循环次数为n次。所以此程序段的时间复杂度为O(nlog2n),即选C。

2求整数n(n≥0)阶乘的算法如下,其时间复杂度是(  )。[2012年联考真题]

A.O(log2n)

B.O(n)

C.O(nlog2n)

D.O(n2

【答案】B

【解析】设fact(n)的运行时间函数是T(n)。

该函数中语句的运行时间是O(1),语句的运行时间是T(n-1)+O(1),其中O(1)为乘法运算的时间。

因此,当n≤1时,T(n)-O(1);当n>1时,T(n)=T(n-1)+O(1)。则,T(n)=O(1)+T(n-1)=2×O(1)+T(n-2)=(n-1)×O(1)+T(1)=n×O(1)=O(n),即fact(n)的时间复杂度为O(n)。

3设n是描述问题规模的非负整数,下面程序片段的时间复杂度是(  )。[2011年联考真题]

A.O(log2n)

B.O(n)

C.O(nlog2n)

D.O(n2

【答案】A

【解析】其中,以基本的原操作重复执行的次数作为算法的时间度量。题目中的基本运算是语句x=2×x,设其执行时间为T(n),则有2Tn<n/2即T(n)<log2(n/2)=O(log2n)。

4以下属于逻辑结构的是(  )。

A.顺序表

B.哈希表

C.有序表

D.单链表

【答案】C

【解析】数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,与数据元素本身的形式、内容、相对位置、所含结点个数都无关。顺序表、哈希表、单链表都涉及到数据的存储结构,有序表是指表中数据有序,是一种逻辑结构,与存储结构无关。

5一个算法应该是(  )。

A.程序

B.问题求解步骤的描述

C.要满足五个基本要求

D.A和C

【答案】B

【解析】程序不一定满足有穷性,如死循环,操作系统等,而算法必须有穷。算法代表了对问题求解步骤的描述,而程序是算法在计算机上的特定实现。

6下面程序段中,执行S语句的次数为(  )。

A.n2

B.n2/2

C.n(n+1)

D.n(n+1)/2

【答案】D

【解析】i的变化范围是从1到n,对于每个已确定值的i,j的变化范围是从1到i,相当于求一个公差为1的等差数列1,2,…,n的前n项和,即:n(n+1)/2。

7以下算法的时间复杂度(  )。

A.O(n)

B.O(n2

C.O(nlog2n)

D.O(log2n)

【答案】D

【解析】基本运算为i=i*2,设其执行时间为T(n),则2Tn<=n,即T(n)<=log2n=O(log2n)。

二、综合题

1已知一个整数序列A=(a0,a1,…,an1),其中0≤ai<n(0≤i≤n),若存在ap1=ap2=…=apm=x且m>n/2(0≤pk≤n,1≤k≤m),则称x为A的主元素。例如A=(0,5,5,3,5,7,5,5),则称5为主元素;又如A=(0,5,5,3,5,1,5,7)则A中没有主元素。假设A中的n个元素保存在一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出该元素;否则输出-1。要求:

(1)给出算法的基本设计思想。

(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

(3)说明你所设计算法的时间复杂度和空间复杂度。[2013年联考真题]

解:(1)算法的策略是从前向后扫描数组元素,标记出一个可能成为主元素的元素Num。然后重新计数,确认Num是否是主元素。

算法可分为以下两步:

选取候选的主元素

依次扫描所给数组中的每个整数,将第一个遇到的整数Num保存到c中,记录Num的出现次数为1;若遇到的下一个整数仍等于Num,则计数加1否则计数减1;当计数减到0时,将遇到的下一个整数保存到c中,计数重新记为1,开始新一轮计数,即从当前位置开始重复上述过程,直到扫描完全部数组元素。

判断c中元素是否是真正的主元素,再次扫描该数组,统计c中元素出现的次数,若大于n/2,则为主元素;否则,序列中不存在主元素。

(2)算法实现如下:

(3)时间复杂度为O(n),空间复杂度为O(1)。

2阅读下面的程序,指出过程pp完成的功能及结果数据结构的名称,并估计算法的时间复杂度O(?),说明理由。设单链表长度为n。

C语言

答:(1)程序的功能是将单链表逆置;

(2)结果数据结构为存入一个带头结点、用尾指针表示的单向循环链表;

(3)算法时间复杂度为O(n)。理由:因为此程序通过递归方法达到单链表的逆置,递归深度与表的结点数相当,回退时处理插入,每层复杂度为O(1),故总的复杂度为O(n)。