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

作者:欧新宇(Xinyu OU)

最后更新:2023-08-19


【课前自测02】

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

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

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

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)

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

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) 成正比


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)

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)

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

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

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}


【课后作业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)

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)

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))

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)

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)

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)

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)

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


【扩展练习02】

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

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

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

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

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

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

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)

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})

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)

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

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)

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)

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

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)

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

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

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

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)

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