前言
时间与空间复杂度分析是数据结构与算法的基础,这篇文章整理了 2009 年 - 2018 年计算机考研专业课 408 中出现的复杂度分析题,我们将通过从真题出发,理清思路,让复杂度分析不复杂。
系列文章
统考408 | 时间与空间复杂度分析真题 (2009 - 2018)
[统考408 | 计算机考研第一题 · 你真的会分析复杂度吗?](coming soon...)
2009 年:无
2010 年
42.(13分)设将n(n>1)个整数存放到一维数组R中。试设计一个在时间和空间两方面都
尽可能高效的算法,将R中保存的序列循环左移p(0
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或c++或Java语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
2011 年
1.设 n 是描述问题规模的非负整数,下面程序片段的时间复杂度是
x=2;
while(x
A.O(log2n) B.O(n) C.O(n log2n) D.O(n2)
42.(15分)一个长度为L(L≥1)的升序序列S,处在第[L/2]个位置的数称为s的中位数。例
如,若序列S1:(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所
有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现
有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两
个序列A和B的中位数。
要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
2012 年
1.求整数n(n≥0)阶乘的算法如下,其时间复杂度是
int fact(int n) {
if(n<=1) return 1;
return n*fact(n-1);
}
A.O(logn) B.O(n) C.O(nlog2n) D.O(n2)
5.对有n个顶点、e条边且使用邻接表存储的有向图进行广度优先遍历,其算法的时间复杂度是
A.O(n) B.O(e) C.O(n+e) D.O(n×e)
42.(13分)假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共
享相同的后缀存储空间。例如,“loading”和“being”的存储映像如下图所示。
设strl和str2分别指向两个单词所在单链表的头结点,链表结点结构为
,请设计一个时间上尽可能高效的算法,找出由str1和str2所指的两个链表共同后缀的起始位
置(如图中字符i所在结点的位置p)。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或c++或Java
(3)说明你所设计算法的时间复杂度。
2013 年
1.已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是
A.O(n) B.O(m×n) C.O(min(m,n)) D.O(max(m,n))
41.(13分)已知一个整数序列A:(a0,a1,…an-1),其中0≤ai
一个一维数组中,请设计一个尽可能高效的算法,找出A的主元素。若存在主元素,则输出
该元素;否则输出-1。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
2014 年
1.下列程序段的时间复杂度是
count=0:
for(k=1;k<=n;k*=2)
for(j=1;j<=n;j++)
count++;
A.0(log2n) B.0(n) C.0(nlog2n) D.0(n2)
2015 年
41.(15分)用单链表保存m个整数,结点的结构为: ,且|data|≤n(n为正整数)。现要求设计一个时间复杂度尽可能高效的算法,对于链表中data的绝对值相等的结点,仅保留第一次出现的结点而删除其余绝对值相等的结点。例如,若给定的单链表head如下:
则删除结点后的head为:
要习之:
(1)给出算法的基本设计思想。
(2)使用C或C++语言,给出单链表结点的数据类型定义。
(3)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
(4)说明你所设计算法的时间复杂度和空间复杂度。
2016 年
7.若将n个顶点e条弧的有向图采用邻接表存储,则拓扑排序算法的时间复杂度是
A.O(n) B.O(n+e) C.O(n2) D.O(n×e)
43.(15分)已知由n(n≥2)个正整数构成的集合A={ak} 0≤k
分算法,满足|n1-n2|最小且|S1-S2|最大。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的平均时间复杂度和空间复杂度。
2017 年
1.下列函数的时间复杂度是
int func(int n){
int i=0, sum=0;
while(sum < n) sum += ++i;
return i;
}
A.O(logn) B.O(n1/2) C.O(n) D.O(nlogn)
2018 年
- (13 分)给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数
组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是 1;数组{1, 2, 3}中未出
现的最小正整数是 4。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。