第02讲 什么是算法? 课堂互动 隐藏答案 | 返回首页

作者:欧新宇(Xinyu OU)

最后更新:2023-08-08


【课前自测02】

1.(单选)在下列函数中,哪个函数具有最快的增长速度。
A. nlog2nn \log^2n
B. n2lognn^2 \log n
C. n3n^3
D. nlogn2n \log n^2

答案及解析:C


2.(单选)算法的优劣与算法描述语言无关,但与所用计算机有关。
A. 正确
B. 错误

答案及解析:B
算法的优劣既与算法描述的语言无关,也与计算机无关。


3.(单选)计算机算法指的是()。
A. 计算方法
B. 排序方法
C. 解决问题的步骤序列
D. 调度方法

答案及解析:C


4.(单选)某算法的语句执行频度为 (3n+nlog2n+n2+8)(3n+n\log_2n+n^2+8),其时间复杂度为()。
A. O(n)O(n)
B. O(nlog2n)O(n\log_2n)
C. n2n^2
D. O(log2n)O(\log_2n)

答案及解析:C
在计算多个时间复杂度的和的复杂度时,以复杂度最高的一个作为数量级的衡量标准。此处,时间复杂度最大的一项是 n2n^2


5.(多选)算法的时间复杂度取决于( )。
A. 问题的规模
B. 待处理数据的初态
C. 计算机的配置
D. 编程语言的种类

答案及解析:AB
算法的时间复杂度不仅与问题的规模有关,还与问题的其他因素有关。如某些排序的算法,其执行时间与待排序记录的初始状态有关。为此,有时会对算法有最好、最坏以及平均时间复杂度的评价。


6.(单选)某算法的时间复杂度为 O(n2)O(n^2),表明该算法的()。
A. 问题规模是 n2n^2
B. 执行时间等于 O(n2)O(n^2)
C. 执行时间与 O(n2)O(n^2) 成正比
D. 问题规模与 O(n2)O(n^2) 成正比

答案及解析:C
时间复杂度为 O(n2)O(n^2),说明算法的时间复杂度 T(n)T(n) 满足 T(n)cn2T(n) \leq cn^2 (c为比例常数),即 T(n)=O(n2)T(n)=O(n^2),时间复杂度 T(n)T(n) 是问题规模 nn 的函数,其问题规模仍然是 nn,而不是 n2n^2


【课堂互动2.1】 算法的基本概念@1.1

1.(单选)算法的时间复杂度不受以下哪些因素的影响。
A. 问题规模
B. 待处理数据状态
C. 处理器的速度
D. 关键步骤的重复次数

答案及解析:C


2.(单选)数据结构中的算法是指()。
A. 计算机程序
B. 解决问题的方法
C. 查找或排序过程
D. 求解特定问题的指令有限序列

答案及解析:D

3.(单选)对一个算法的评价,不包括如下()方面的内容。
A. 健壮性和可读性
B. 并行性
C. 正确性
D. 时空复杂性

答案及解析:B
一个算法的优劣应该从以下几个方面评价:正确性、可读性、健壮性和高效性。选项D中的“时空复杂性”属于高效性评价的指标。所以,只有选项B是错误的。


4.(单选)通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是()。
A. 正确性算法应能正确地实现预定的功能
B. 易读性算法应易于阅读和理解,以便调试、修改和扩充
C. 正确性健壮性指环境发生变化时,算法能是当地作出反应或进行处理,不会产生不需要的运行结果
D. 高效性即达到所需要的时间性能

答案及解析:D
高效性包括时间和空间两个方面,而不应该仅指时间性能高效。


5.(单选)一个算法应该是()。
A. 程序
B. 问题求解步骤的描述
C. 要满足五个基本特性
D. 能够完整运行并产生输出

答案及解析:B
本题是中山大学考研真题,考查算法的定义。程序不一定满足有穷性,如死循环、操作系统等,而算法必须有穷。算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现。选项C是算法的必要条件,但不是算法的定义。


【课堂互动2.2】 算法的时间复杂度@1.2

1.(判断)在数据结构的范畴中,任何能够描述客观事物属性的符号集合都称为数据。
A. 正确
B. 错误

答案及解析:B
数据是能够 输入到计算机,并且用于描述客观事物属性的符号的集合。


2.(填空)试分析以下程序段的时间复杂度。

x = 90; y = 100; 
while(y > 0)
    if(x > 100){
        x = x-10;
        y--;
    }
    else x++;

答案及解析:O(1)


3.(填空)试分析以下程序段的时间复杂度。

for (i=0; i<n; i++)
    for (j=0; j<m; j++)
        a[i][j] = 0;

答案及解析:O(m*n)


【课堂互动2.3】 算法的空间复杂度、数据结构求解问题的过程@1.3-1.4

1.(单选)在数据结构求解问题的过程中,以下哪一个步骤的主要目的是获取最优算法。
A. 问题描述
B. 存储结构设计
C. 算法设计
D. 算法分析

答案及解析:D


2.(单选)空间复杂度通常按照()情况来进行分析。
A. 最优
B. 最坏
C. 平均
D. 任意

答案及解析:B


3.(单选)下面算法将一维数组 aa 中的 nn 个数逆序存放到原数组中,空间复杂度为()。

for(i=1; i<=n; i++)
    b[i] = a[n-i-1];
for(j=1; j<=2*i; j++)
    a[i] = b[i];

A. O(1)O(1)
B. O(n)O(n)
C. O(log2n)O(\log_2n)
D. O(n2)O(n^2)

答案及解析:B
算法的空间复杂度只需要分析该算法在实现时所需要的辅助空间与问题规模nn的函数关系。该算法那需要另外借助一个大小为 nn 的辅助数组bb,所以其空间复杂度为O(n)O(n)


4.(单选)下面算法将一维数组 aa 中的 nn 个数逆序存放到原数组中,空间复杂度为()。

for(i=1; i<=n/2; i++){
    t = a[i];
    a[i] = a[n-i-1];
    a[n-i-1] = t;
}

A. O(1)O(1)
B. O(n)O(n)
C. O(log2n)O(\log_2n)
D. O(n2)O(n^2)

答案及解析:A
该算法仅需要另外借助一个变量tt,与问题规模nn大小无关,所以其空间复杂度为为O(1)O(1)


5.(填空)试分析以下程序段的时间复杂度。

i=1;
while(i<=n)
    i=i*3;

答案及解析:O(log3n)O(\log_3n)


6.(单选)以下程序段中语句 "x++;" 的语句频度为()。

for(i=1; i<=n; i++)
    for(j=1; j<=i; j++)
        for(k=1; k<=j; k++)
            x++;

A. n(n+1)(2n+1)2\frac{n(n+1)(2n+1)}{2}
B. n(n+1)(n+1)2\frac{n(n+1)(n+1)}{2}
C. n(n+1)(2n+1)6\frac{n(n+1)(2n+1)}{6}
D. n(n+1)(n+2)6\frac{n(n+1)(n+2)}{6}

答案及解析:D


【课后作业02】

1.(单选)[2011统考真题] 设 nn 是描述问题规模的非负整数,下面的程序片段的时间复杂度是()。

x = 2;
while(x < n/2)
    x = 2*x

A. O(log2n)O(\log_2 n)
B. O(n)O(n)
C. O(nlog2n)O(n \log_2 n)
D. O(n2)O(n^2)

答案及解析:A


2(单选)[2012统考真题] 求整数 n(n0)n (n \geq 0) 的阶乘的算法如下,其时间复杂度是()。

int fact(int n){
    if(n<=1) 
        return 1;
    return n*fact(n-1);
}

A. O(log2n)O(\log_2 n)
B. O(n)O(n)
C. O(nlog2n)O(n \log_2 n)
D. O(n2)O(n^2)

答案及解析:B
本题是阶乘n!的递归代码,即n×(n1)×...×1n×(n-1)×...×1。每次递归调用fact()一次,共执行了n次递归调用,因此 T(n)=O(n)T(n)=O(n)


3.(单选)[2013统考真题] 已知两个长度分别为 m 和 n 的升序链表,若将它们合并为长度为 m+n 的一个降序链表,则最坏情况下的时间复杂度是()。

A. O(n)O(n)
B. O(mn)O(mn)
C. O(min(m,n))O(min(m, n))
D. O(max(m,n))O(max(m, n))

答案及解析:D

4.(单选)[2014统考真题] 下列程序段的时间复杂度为()。

count = 0;
for(k=1; k<=n; k*=2)
    for(j=1; j<=n; j++)
        count++;

A. O(log2n)O(\log_2 n)
B. O(n)O(n)
C. O(nlog2n)O(n \log_2 n)
D. O(n2)O(n^2)

答案及解析:C


5.(单选)[2017统考真题] 下列函数的时间复杂度为()。

int func(int n){
    int i = 0, sum = 0;
    while(sum < n)
        sum += ++i;
    return i;
}

A. O(logn)O(\log n)
B. O(n1/2)O(n^{1/2})
C. O(n)O(n)
D. O(nlogn)O(n \log n)

答案及解析:C


6.(单选)[2019统考真题] 设 nn 是描述问题规模的非负数,下列程序段的时间复杂度是()。

x = 0;
while (n >= (x+1)*(x+1)) {
    x = x + 1;
}

A. O(logn)O(\log n)
B. O(n1/2)O(n^{1/2})
C. O(n)O(n)
D. O(n2)O(n^2)

答案及解析:B


7.(单选)[2022统考真题] 下列程序段的时间复杂度是()。

int sum = 0;
for(int i=1; i<n; i*=2)
    for(int j=0; j<i; j++)
        sum++;

A. O(logn)O(\log n)
B. O(n)O(n)
C. O(nlogn)O(n \log n)
D. O(n2)O(n^2)

答案及解析:B


8.(多选)下面说法错误的是()。
A. 算法原地工作的含义是指不需要任何额外的辅助空间
B. 在相同的规模 nn 下,复杂度 O(n)O(n) 的算法在时间上总是优于复杂度 O(2n)O(2^n) 的算法
C. 所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界
D. 某算法的时间复杂度为 O(n2)O(n^2),表明该算法的执行时间与 n2n^2 成正比

答案及解析:A
原地工作指算法执行时所需要的辅助空间,其相对于输入量而言是个常数,语句A声称不需要任何额外辅助空间是错误的。


【扩展练习02】

1.(填空)试分析以下程序段的时间复杂度。

s=0;
for(i=0; i<n; i++)
    for(j=0; j<n; j++)
        s += B[i][j];
sum = s;

答案及解析:O(n2)O(n^2)


2.(填空)试分析以下程序段的时间复杂度。

x=0;
for(i=1; i<n; i++)
   for (j=1; j<=n-i; j++)
        x++;

答案及解析:O(n2)O(n^2)


3.(填空)试分析以下程序段的时间复杂度。

x = n;  //n>1
y = 0;
while(x >= (y+1)*(y+1))
    y++;

答案及解析:O(n)O(\sqrt{n})

4.(单选)以下程序段的时间复杂度为()。

void fun(int n)
    int i = 1;
    while(i <= n)
        i = i * 2;

A. O(n)O(n)
B. O(n2)O(n^2)
C. O(nlog2n)O(n \log_2 n)
D. O(log2n)O(\log_2 n)

答案及解析:D


5.(单选)以下程序段的时间复杂度为()。

void fun(int n) {
    int i = 0;
    while(i*i*i <= n)
        i++;
}

A. O(n)O(n)
B. O(nlog2n)O(n \log_2 n)
C. O(n3)O(\sqrt[3]{n})
D. O(n)O(\sqrt{n})

答案及解析:C


6.(单选)有一程序段如下:

for(i=n-1; i>1; i--)
    for(j=1; j<i; j++)
        if(A[j] > A[j+1])
            A[j] 与 A[j+1] 对换;
}

其中 nn 为正整数,则最后一行语句的频度在最坏情况下是()。

A. O(n)O(n)
B. O(nlogn)O(n \log n)
C. O(n3)O(n^3)
D. O(n2)O(n^2)

答案及解析:D


7.(单选)以下算法中的基本语句的执行次数为()。

int m = 0, i, j;
for(i=1; i<=n; i++)
    for(j=1; j<=2*i; j++)
        m++;
}

A. n(n+1)n(n+1)
B. nn
C. n+1n+1
D. n2n^2

答案及解析:A


8.(单选)如果一个算法的时间复杂度为 (3n2+2nlog2n+4n7)/5n(3n^2+2n\log_2n+4n-7)/5n,那么时间复杂度的数量级表示为()。

A. O(logn)O(\log n)
B. O(n)O(n)
C. O(nlogn)O(n \log n)
D. O(n2)O(n^2)

答案及解析:B
多个时间复杂度的和的时间复杂度数量级等于最复杂的那个项。本题中包含4个项,分别是O(3n),O(2log2n),4,7/nO(3n), O(2log_2n), 4, 7/n,其中最大的是 O(3n)=O(n)O(3n)=O(n)


9.(单选)下面这段代码的复杂度是()。

x = 0;
while(n >= (x+1)*(x+1))
    x = x + 1;
}

A. O(log2n)O(log_2 n)
B. O(n1/2)O(n^{1/2})
C. O(n)O(n)
D. O(n2)O(n^2)

答案及解析:B


10.(单选)以下程序段中语句 "m++;" 的语句频度为()。

int m = 0, i, j;
for(i=1; i<=n; i++)
    for(j=1; j<=2*i; j++)
        m++;

A. n(n+1)n(n+1)
B. nn
C. n+1n+1
D. n2n^2A

答案及解析:A


11.(单选)设一维数组中有 nn 个数组元素,则读取第 ii 个数组元素的平均时间复杂度为()。
A. O(n)O(n)
B. O(nlog2n)O(n\log_2n)
C. O(1)O(1)
D. O(n2)O(n^2)

答案及解析:C
读取第 ii 个数组元素可以直接通过数组的下标定位,与 nn 无关,因此平均时间复杂度为 O(1)O(1)


12.(单选)下列叙述中正确的是()。
A. 一个算法的空间复杂度大,则其时间复杂度也必定大
B. 一个算法的空间复杂度大,则其时间复杂度必定小
C. 一个算法的时间复杂度大,则其空间复杂度必定小
D. 以上三种说法都不对

答案及解析:D
算法的时间复杂度和空间复杂度没有直接关系。


13.(单选)下面关于算法说法正确的是()。
A. 算法最终必须由计算机程序实现
B. “为解决某个问题规定的算法”同“为该问题编写的程序”含义是相同的
C. 算法的可行性是指指令不能有二义性
D. 以上几个都是错误的

答案及解析:D
A选项,算法是为了解决某类问题而规定的一个有限长的操作序列,但并非必须由计算机实现的;
B选项,“为解决某个问题规定的算法”同“为该问题编写的程序”含义不同,因为程序的编写与具体的语言有关,而算法与语言无关。
C选项,算法的可行性是指算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。


14.(单选)算法分析的两个主要方面是()。
A. 空间复杂度和时间复杂度
B. 正确性和简单性
C. 可读性和文档性
D. 数据复杂性和程序复杂性

答案及解析:A
时间高效时算法设计合理,执行效率高,可以用时间复杂度来度量;空间高效时指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度时衡量算法的两个主要指标。


15.(单选)设有以下三个函数分别用来表示三个算法的语句频度之和:
f(n)=1000n3+n2+1000f(n) = 1000n^3 + n^2 +1000
g(n)=10n3+1000n2g(n) = 10n^3 + 1000n^2
h(n)=1000n2.01+1000nlog2nh(n) = 1000n^{2.01} + 1000n\log_2n
以下关系式中,有错误的是()。

A. O(f(n))=O(g(n))O(f(n)) = O(g(n))
B. O(g(n))=O(n3)O(g(n)) = O(n^3)
C. O(h(n))=O(n2)O(h(n)) = O(n^2)
D. O(h(n))=O(nlog2n)O(h(n)) = O(n\log_2n)

答案及解析:D
在计算算法时间复杂度时,可以忽略所有低次幂项和最高次幂的系数,这体现出了增长率的含义。依据该原则,可以看出上述前两个算法的时间复杂度均为O(n3)O(n^3),最后一个算法的时间复杂度为O(n2)O(n^2)

第02讲 什么是算法? 课堂互动 隐藏答案 | 返回首页