408考研数据结构复习-时间复杂度与空间复杂度-附统考真题

在这里插入图片描述


文章目录

    • 一、时间复杂度
    • 二、空间复杂度
    • 三、相关题目


一、时间复杂度

一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。因此,算法的时间复杂度记为T(n)=O(f(n))

式中,O的含义是T(n)的数量级,其严格的数学定义是:若T(n)f(n)是定义在正整数集合上的两个函数,则存在正常数C和n0,使得当n>=n0时,都满足0<=T(n)<=Cf(n)

算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质。例如,在数组A[0…n-1]中,查找给定值k的算法大致如下:

int i=n-1;
while(i>=0&&(A[i]!=k))i--;
return i;	

该算法中语句i--;(基本运算)的频度不仅与问题规模n有关,还与输入实例中A的各元素的取值以及k的取值有关:
①若A中没有与k相等的元素,则语句3的频度f(n)=n
①若A中最后一个元素为k,则语句3的频度f(n)=0

最坏时间复杂度是指在最坏情况下,算法的时间复杂度。平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。最好时间复杂度是指在最好情况下,算法的时间复杂度。一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

在分析一个程序的时间复杂性时,有以下两条规则:
①加法规则

T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))

②乘法规则

T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))

常见的渐近时间复杂度为:

O(1)<O(logn)<O(n)<O(nlogn)<O(n*n)<O(n*n*n)<O(2的n方)<O(n!)<O(n的n方)

二、空间复杂度

算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。记为S(n)=O(g(n))。

一个程序在执行时除需要存储空间来存放本身所用的指令、常数、变量和输入数据外,还需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间。若输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外的额外空间。

算法原地工作是指算法所需的辅助空间为常量,即O(1)。


三、相关题目

1 以下算法的时间复杂度为(O(log2n))

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

解析:找到基本运算i=i*2,设执行次数为t,则2的t次方<=n,即t<=log2n,因此时间复杂度T(n)=O(log2n)。

2 有以下算法,其时间复杂度为(O(n的根号3方))

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

解析:基本运算为i++,设执行次数为t,有ttt<=n,即t的3次方<=n,则t<=n的根号3次方。

3 程序段如下:

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

其中n为正整数,则最后一行语句的频度在最坏情况下是(O(n*n))
解析:
在这里插入图片描述

4 【2011统考真题】设n是描述问题规模的非负整数,下面的程序片段的时间复杂度是(O(log2n))

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

解析:基本运算为x=2*x,每执行一次乘以2,设执行次数为t,则有2的(t+1)次方<n/2,所以t<log2(n/2)-1=log2n-2,则T(n)=O(log2n)。

5 【2012统考真题】求整数n的阶乘的算法如下,其时间复杂度是(O(n))

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

解析:该递归相当于返回O(n)次。

6 【2013统考真题】已知两个长度分别为m和n的升序链表,若将它们合并为长度为m+n的一个降序链表,则最坏情况下的时间复杂度是(O(max(m,n)))
解析:两个升序链表合并,两两比较表中元素,每比较一次,确定一个元素的链接位置(取较小元素)。当一个链表比较结束后,将另一个链表的剩余元素插入即可。最坏的情况是两个链表中的元素依次进行比较,因为2max(m,n)>=m+n,所以时间复杂度为O(max(m,n))。

7 【2014统考真题】下列程序段的时间复杂度是(nlong2n)

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

解析:内层循环条件j<=n与外层循环的变量无关,各自独立,每执行一次j自增1,每次内层循环都执行n次。外层循环条件k<=n,增量定义为k*=2,可知循环次数t满足k=2的t次方<=n,即t<=log2n。内层循环的时间复杂度为O(n),外层为O(log2n)。对于嵌套循环,根据乘法法则可知,T(n)=O(n)*O(log2n)=O(nlog2n)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解调去载波后均衡信道与实际信道的关系

关注公号【逆向通信猿】更精彩!!! 通常,信号经过调制后发送,会经过信道作用,示意图可以表示为 其中 x ( t ) x(t) x(t)为基带信号, e

第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

【问题描述】 对于一棵多叉树&#xff0c;我们可以通过 “左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。换句话说&#xff0c;每个结点可以选任意子结点作为左孩子&#xff0c;并按任…

activiti脚本任务_Activiti中的高级脚本:自定义配置注入

activiti脚本任务脚本任务可能是Activiti代码库中“最古老的”类之一&#xff0c;但是我认为它仍然未被许多人使用。 &#xff08;感知到的&#xff09;缺点当然是性能&#xff08;解释还是编译&#xff09;&#xff0c;并且从IDE角度来看支持较少。 但是&#xff0c;好处&…

【锁相环系列3】QPSK+基带+Costas锁相环载波同步(重点环路滤波器参数设置和迭代核心代码详解)

引言 假设在QPSK信号解调中,完成匹配滤波、定时抽样后的星座如下所示 而画出基带信号部分点的星座图如下所示 由以上两幅图可以看出,基带信号中还存在微小的频偏,导致星座图旋转,而这种微小的频偏很难通过FFT估计出来,由此想到了用锁相环解决,锁相环锁定后的星座如下 …

线性移位寄存器序列(m序列)之MATLAB实现

移位寄存器的结构 nnn级线性移位寄存器的结构如下图 当生成多项式g(x)g(x)g(x)为本原多项式时&#xff0c;产生的序列为m序列。例如 g(x)x5x21g(x)x^5x^21g(x)x5x21的本原多项式&#xff0c;初态为10000的5级m序列&#xff0c;其周期为25−1312^5-13125−131&#xff0c;结构如…

scala和java像不像_关于Java和Scala同步的五件事你不知道

scala和java像不像实际上&#xff0c;所有服务器应用程序都需要在多个线程之间进行某种同步。 大多数同步工作是在框架级别为我们完成的&#xff0c;例如通过我们的Web服务器&#xff0c;数据库客户端或消息传递框架。 Java和Scala提供了许多组件来编写可靠的多线程应用程序。 …

BPSK调制下(2,1,6)标准卷积码及打孔生成2/3、3/4、4/5、5/6删余码Viterbi译码误码率曲线图(MATLAB实现)

关注公号【逆向通信猿】更精彩!!! 目录 仿真结果卷积码原理图删余后性能比较常用的删余码仿真代码根据码率生成打孔参数(子函数)将标准(2, 1, 6)编码后的序列进行打孔,生成删余码(子函数)对接收到的序列进行反打孔,将原来打孔删除的比特进行补零(子函数)BPSK调制下(2,1,6…

江南大学物联网工程学院数据库课程实验三作业3vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码及配置 1、Form1 Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate …

[2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

欢迎同步关注公众号【逆向通信猿】 CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校验的功能,网站提供的在线计算工具是以十六进制来表示输入参数和结果的,为了方便MATLAB实现,本文提供…

江南大学物联网工程学院数据库课程实验四作业4vb.net实验报告

一、开发环境 语言环境&#xff1a;Microsoft.NET Framework 4.6 SDK IDE&#xff1a;Microsoft Visual Studio Community 2015 二、代码 Imports System.Data.SqlClient Public Class Form1 连接本机数据库并获取test_one数据库中的sc表数据 Dim mybind As BindingManagerB…

MATLAB库函数hilbert(希尔伯特变换)的C语言实现(FFT采用FFTW库)

目录希尔伯特变换原理公式MATLAB官方帮助文档中希尔伯特变换算法常量和结构体定义C语言实现(FFTW库的float版&#xff0c;double版类似)希尔伯特变换原理公式 MATLAB官方帮助文档中希尔伯特变换算法 hilbert uses a four-step algorithm: Calculate the FFT of the input sequ…

netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理

netbeans7.4有许多例子说明Java异常处理可能比首次出现时要困难得多&#xff0c;Josh Bloch专门将一整章的《 Effective Java》 &#xff08;两个版本&#xff09;专门用于异常处理。 Java中的检查异常模型 仍然 “ 有争议” 。 我很高兴看到我最近下载的NetBeans 7.4 beta有一…

在厚度仅十几微米的电池隔膜找缺陷?人工智能说,能行(人工智能应用案例)

原文链接&#xff1a;https://www.paddlepaddle.org.cn/support/news?actiondetail&id2104 “我们的质检要做的是在厚度仅十几微米的电池隔膜上找出所有微小缺陷&#xff0c;如果没有检测出来&#xff0c;就很可能使新能源汽车的电池在使用过程中出现问题&#xff0c;甚至…

准确率超90%、1秒发出报警,人工智能助国网山东实现无人巡检(人工智能应用案例)

原文链接&#xff1a;https://mp.weixin.qq.com/s/Jh2YLY-4um79ucdHIs5NTg 众所周知&#xff0c;深度学习框架是人工智能的基础技术“底座”&#xff0c;在各大传统产业上也有着巨大的潜力尚待挖掘。5月20日&#xff0c;由深度学习技术及应用国家工程实验室与百度联合主办的“…

基于PaddlePaddle实现高尔夫球场的遥感检测(人工智能应用案例)

原文链接&#xff1a;https://www.paddlepaddle.org.cn/support/news?actiondetail&id2103 1 . 背景及意义 随着高尔夫球运动在我国的兴起&#xff0c;关于高尔夫球场大量占用土地资源、污染环境、耗水量大且公益性差的争议越来越多。国家从2004年开始制定一系列相关政策…

MATLAB库函数firls(最小二乘线性相位FIR滤波器设计)的C语言实现

firls函数功能 FILS设计了一种线性相位FIR滤波器,它可以最小化理想分段线性函数与滤波器在一组期望频带上的幅值响应之间的加权积分平方误差。 b = firls(n,f,a) b = firls(n,f,a,w) b = firls(n,f,a,ftype) b = firls(n,f,a,w,ftype)f是在0和1之间的范围内指定的频率点对的…

数电实验一-初识Multisim和Basys3

特别说明&#xff1a;该系列内容均是本人实验记录&#xff0c;无盗取侵权之嫌&#xff0c;仅供参考&#xff0c;请多动手实践&#xff01; 一、实验目的 详见报告 二、实验仪器设备 详见报告 三、实验设计过程 使用Multisim为Basys3板卡创建一个PLD设计并进行验证。 1.创建P…

自动化学科前沿讲座作业 基于深度学习的工厂人员监测系统设计

1 背景及应用场景 在工业复杂生产环境下&#xff0c;作业人员的安全问题至关重要。大多数工业企业采用人眼观察视频的方式对作业人员位置进行判断&#xff0c;这种方式长时间会使管理者出现疲劳问题&#xff0c;效率非常低下&#xff0c;遇到安全问题也不能进行及时的处理。采用…

多重继承java_Java中的多重继承与组合vs继承

多重继承java有时我写了几篇有关Java 继承 &#xff0c; 接口和组成的文章。 在这篇文章中&#xff0c;我们将研究多重继承&#xff0c;然后了解组成优于继承的好处。 Java中的多重继承 多重继承是创建具有多个超类的单个类的能力。 与其他一些流行的面向对象的编程语言&#…

数电实验二-点亮一个数码管(Multisim和Basys3 )

特别说明&#xff1a;该系列内容均是本人实验记录&#xff0c;无盗取侵权之嫌&#xff0c;仅供参考&#xff0c;请多动手实践。 一、实验目的 详见报告 二、实验环境 详见报告 三、实验内容 &#xff08;1&#xff09;基本要求&#xff1a;以Basys3四位拨码开关SW3~SW0为输入…