• 【考研】时间复杂度与空间复杂度习题练习(含真题)


    前言

    题目主要是选取自408考研真题、《数据结构(C语言版)》严蔚敏编著的教材课后习题、王道习题等。

    如有错误,请在评论区讨论指正。

    目录

    前言

    一、时间复杂度

    二、空间复杂度


    一、时间复杂度

    1、试分析下列各算法的时间复杂度。

    1. // (1)
    2. x = 90; y = 100;
    3. while(y > 0){
    4. if(x > 100){
    5. x = x - 10;
    6. y--;
    7. }else{
    8. x++;
    9. }
    10. }

    (1)解:运行程序,有 x < 100, x = 91 ...... x = 101时,有 x = 91, y = 99,每循环11次y的值减1,所以总循环次数有11 * 100 = 1100。

    所以,时间复杂度:O(1) ,因为程序的执行次数为常数阶。

    1. //(2)
    2. for (i = 0; i < n; i++)
    3. for (j = 0; j < m; j++)
    4. a[i][j] = 0;

    (2)解:语句 a[i][j] = 0; 执行次数有  \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} 1 =\sum_{i=0}^{n-1}(m-1) ,可推出执行次数为 m * n 次。

    所以时间复杂度为 O(m*n)。

    1. // (3)
    2. s = 0;
    3. for(i = 0; i < n; i++)
    4. for(j = 0; j < n; j++)
    5. s += B[i][j];
    6. sum = s;

     (3)解:语句 s += B[i][j]; 的执行次数为 n * n 。

    所以,时间复杂度为 O(n^2) 。

    1. //(4)
    2. i = 1;
    3. while(i <= n)
    4. i = i*3;
    5. /* //推导可知:
    6. i = 1;
    7. while(i <= n)
    8. i = i*2;
    9. //时间复杂度为O(logn),底数为2。
    10. */

    (4)解: i 的值为:1,3,9, 27,...

    用 i(x) 表示第 x 次循环时i的值,则 i(x) = 3^x , x初始值为0。

    语句 i = i*3; 的执行次数为 3^x \leq n,有 x \leq log_3n

    所以,时间复杂度为 O(log_3n) 。

    1. //(5)
    2. x = 2;
    3. while(x < n/2)
    4. x = x * 2;

    (5)解:x 的取值是首项为4,公比为2的等比数列,

    设执行次数为 t,则有  2^{t+1}<\frac{n}{2},即 t<log_2{\frac{n}{2}}-1

    所以,时间复杂度为 O(log_2n) 。

    1. //(6)
    2. x = 0;
    3. for(i = 1; i < n; i++)
    4. for (j = 1; j <= n-i; j++)
    5. x++;

    (6)解: 语句x++; 的执行次数为 \sum_{i=1}^{n-1}\sum_{j=1}^{n-i} 1 =\sum_{i=1}^{n-1}(n-i) = (n-1)+(n-2)+(n-3)+...+2 + 1 = \frac{(n-1)n}{2}

    所以,时间复杂度为 O(n^2)

    1. //(7)
    2. x = 0;
    3. for(k = 1; k <= n; k*=2)
    4. for (j = 1; j <= n; j++)
    5. x++;

    (7)解:此题不同于(6)小题,内层循环条件 j <= n 与外层循环变量无关。

    每执行一次 j 自增一,每次内层循环都执行 n 次,所以内层的时间复杂度为 O(n)。

    对于外层,设循环次数 t 满足 k=2^t\leq n, 所以,t\leq log_2n

    所以,内层的时间复杂度*外层的时间复杂度即为 O(n)*O(log_2n)=O(nlog_2n)

     所以,时间复杂度为 O(nlog_2n) 。

    1. //(8)
    2. int fact(int n){
    3. if(n <= 1)
    4. return 1;
    5. return n*fact(n-1);
    6. }

    (8)解:本题是求 n 的阶乘,即 n(n-1)(n-2)*...*2*1,

    每次递归调用时 fact() 的参数减一,递归出口为 fact(1),一共执行 n 次递归调用 fact(),

    所以,时间复杂度为 O(n) 。

    1. //(9)
    2. x = n; //n>1
    3. y = 0;
    4. while(x ≥ (y+1) * (y+1))
    5. y++;

    (9)解:语句 y++; 的执行次数为 n \geq (y+1) * (y+1)),有 y \leq n^{\frac{^{1}}{2}}-1

     所以,时间复杂度为 O(n^{\frac{1}{2}})

    1. //(10)
    2. int func(int n){
    3. int i = 0, sum = 0;
    4. while(sum < n)
    5. sum += ++i;
    6. return i;
    7. }

    (10)解:i 与 sum 的取值变化如下:

    isum
    10+1
    20+1+2
    30+1+3
    ......
    0+1+2+3+...+t = \frac{t(1+t)}{2}

    所以,有  \frac{t(1+t)}{2}<n\Rightarrow \frac{t^2}{2}<n\Rightarrow t<\sqrt{2n}

     所以,时间复杂度为 O(n^{\frac{1}{2}})

    1. //(11)
    2. for(int i= n-1; i > 1; i--)
    3. for (int j = 1; j < i; j++)
    4. if(A[j] > A[j+1])
    5. A[j]与A[j+1]对换;

    (11)解:最后一行语句频度在最坏情况下是 O(n^2) 。

    当所有相邻元素都为逆序时,则最后一行的语句每次都会执行。

    则有 \sum_{i=2}^{n-1}\sum_{j=1}^{i-1}1=\sum_{i=2}^{n-1}(i-1)=\frac{(n-2)(n-1)}{2}

     所以,时间复杂度为 O(n^2)

    2、已知两个长度分别为 m 和 n 的升序链表,若将它们合并为长度为 m + n 的一个降序链表,则最坏情况下的时间复杂度是 O(max(m,n))


    解:两个升序链表合并,两两比较表中元素,每比较一次,确定一个元素的链接位置(取较小元素)。当一个链表比较结束后,将另一个链表的剩余元素插入即可。

    最坏的情况是两个链表中的元素依次进行比较,因为2 max(m,n) >= m + n,所以时间复杂度为O(max(m,n))。

    二、空间复杂度

    1、试分析以下算法的空间复杂度。
    1. // (1)
    2. int j = 0;
    3. for (int i = 0; i < n; i++) {
    4. j++;
    5. }

    (1)解:随着 n 的变化,所需开辟的内存空间并不会随着 n 的变化而变化,

    所以,空间复杂度 O(1)。

    1. //(2)
    2. int fun(int n){
    3. int x = 100;
    4. if(n == x)
    5. return n;
    6. else
    7. return fun(++n);
    8. }

    (2)解:此题是递归调用fun函数,随着 n 的变化,所需开辟的内存空间会随着 n 的变化而变化,所以,空间复杂度 O(n)。

  • 相关阅读:
    bat -- start
    springboot整合mybatis & druid
    【iOS】计算器实现
    Practice Exam: Oracle Cloud Infrastructure Generative AI Professional
    多种方法论的融合,可以把FMEA做得更好——FMEA软件
    Spring源码系列-框架中的设计模式
    【RTOS训练营】任务调度(续)、任务礼让、调度总结、队列和晚课提问
    UE4 植物生长
    Spring Ioc 容器启动流程
    socat管理haproxy配置
  • 原文地址:https://blog.csdn.net/qq_34438969/article/details/126295331