统考408 | 时间与空间复杂度分析真题 (2009 - 2018)

前言

时间与空间复杂度分析是数据结构与算法的基础,这篇文章整理了 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 且m>n/2(0≤pk 主元素;又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在
一个一维数组中,请设计一个尽可能高效的算法,找出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如下:


image.png

则删除结点后的head为:


image.png

要习之:
(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 集A1和A2,元素个数分别是n1和n2,A1和A2中元素之和分别为S1和S2。设计一个尽可能高效的划
分算法,满足|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 年
  1. (13 分)给定一个含 n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数
    组中未出现的最小正整数。例如,数组{-5, 3, 2, 3}中未出现的最小正整数是 1;数组{1, 2, 3}中未出
    现的最小正整数是 4。要求:
    (1)给出算法的基本设计思想。
    (2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
    (3)说明你所设计算法的时间复杂度和空间复杂度。

你可能感兴趣的:(统考408 | 时间与空间复杂度分析真题 (2009 - 2018))