时间复杂度详解

article/2025/11/10 18:59:25

目录

一.  时间复杂度概念

例题1:

二.  推导大O阶

三.  几种常见的时间复杂度:

 

3.1常数阶:

3.2线性阶:

 例题2:

3.3对数阶

3.4 平方阶:

​编辑

例题3:​编辑

解题思路:

变式1:

3.5 总结

 四、空间复杂度

4.1 空间复杂度O(1)

4.2空间复杂度O(n)

例题4:数字排序 奇数在前偶数在后

注意:

运算符优先级问题


一.  时间复杂度概念

 

 这样用大写O(来体现算法时间复杂度的记法,我们称之为大О记法。一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。

显然,由此算法时间复杂度的定义可知,我们的三个求和算法的时间复杂度分别为o(n),o(1),0(n2)。我们分别给它们取了非官方的名称,O(1)叫常数阶、O(n)叫线性阶、O(n2)叫平方阶,当然,还有其他的一些阶.

时间复杂度:0(1)序列被执行的次数,次数一定跟问题规模相关

例题1:

 我们先看执行了多少条语句,分析如下:

当找到2时一共执行了六条语句 复杂度为O(1).

二.  推导大O阶

三.  几种常见的时间复杂度:

 

3.1常数阶:

首先顺序结构的时间复杂度。下面这个算法,也就是刚才的第二种算法(高斯算法),为什么时间复杂度不是O(3),而是O(1)。

这个算法的运行次数函数是f (n) =3。根据我们推导大О阶的方法,第一步就是把常数项3改为1。在保留最高阶项时发现,它根本没有最高阶项,所以这个算法的复杂度为O(1).

事实上无论n为多少,上面的两段代码就是3次和12次执行的差异。这种与问题的大小无关(n的多少),执行时间恒定的算法,我们称之为具有0(1)的时间复杂度,又叫常数阶。

注意:不管这个常数是多少,我们都记作0(1),而不能是o(3)、0(12)等其他任何数字.

3.2线性阶:

线性阶的循环结构会复杂很多。要确定某个算法的阶次,我们常常需要确定某个特定语句或某个语句集运行的次数。因此,我们要分析算法的复杂度,关键就是要分析循环结构的运行情况。

下面这段代码,它的循环的时间复杂度为0[n),因为循环体中的代码须要执行n次。

 

 例题2:

首先一定是与n有关系的,10个数据循环五次,20个数据循环十次

所以时间复杂度为 O(n/2),但是由于推导大n阶 我们只保留最高阶项所以依旧为O(n)

3.3对数阶

 

由于每次count乘以2之后,就距离n更近了一分。也就是说,有多少个2相乘后大于 n,则会退出循环。由2x=n得到x=bgan。所以这个循环的时间复杂度为0(logn)。

3.4 平方阶:

例题3:

解题思路:

变式1:

解题思路

轮转了一个等差数列:首项 n-1 末项 1 等差数列的和 n的平方

时间复杂度O(n^2)

3.5 总结

常用的时间复杂度耗费时间排序:

O(n^2)>O(n)>O(logn)>O(1)     

 四、空间复杂度

    空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势, 空间复杂度比较常用的有:O(1)、O(n)、O(n^2)

4.1 空间复杂度O(1)

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为O(1)

int i=1;
int j=2;
i++;
j++;
int m=i+j;

代码中的i、j、m所分配的空间都不随着处理数据量变化,因此它的空间复杂度为O(1)

4.2空间复杂度O(n)

int [] m=new int[n]
for(i=1;i<=n;i++)
{
i=j;
j++;
}

新new了一个数组出来,这个数组占用大小为n,因此,这段代码的空间复杂度为O(n)

例题4:数字排序 奇数在前偶数在后

void Ajust(int* arr, int len) {int i = 0, j = len - 1;while (i < j) {//1. 从左-> 右元素查找,找到偶数值的位置停止//奇数 继续向下查找while (i<j && (arr[i] & 0x1) != 0) {   //优化  arr[i]%2 != 0i++;}//i 标记就是偶数值下标//2. 从右 -> 左 元素查找  找奇数值所在位置停止while (i<j && (arr[j] & 0x1) == 0) {j--;}//j 标记奇数值的位置if (i < j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}int main() {int arr[] = { 1,2,3,4,5,6,7,9 };  //1,3,5int len = sizeof(arr) / sizeof(arr[0]);Ajust(arr, len);for (int i = 0; i < len; i++) {printf("%-5d", arr[i]);}return 0;
}

注意:

运算符优先级问题

i<j && (arr[i] & 0x1) != 0 需要留意 按位与 和 逻辑与 还有 等号 的优先级问题

附上优先级表:

 

 

解决方法:

所以在运算时要加上小括号 保证先进行按位与运算 而不是 == 运算


http://chatgpt.dhexx.cn/article/yQ6T9jfp.shtml

相关文章

一套图 搞懂“时间复杂度”

写在前面&#xff1a; 这篇文章是在公众号&#xff1a; 程序员小灰 中发布的。是我到目前为止所看到的关于时间复杂度介绍的最好的文章&#xff0c;清晰明了。 所以拿来po出来 仅供学习交流&#xff0c;如侵则删。 现已将此文收录至&#xff1a; 《数据结构》C语言版 (清华严…

各位学弟学妹,别再看教材了,时间复杂度看这篇就好了

时间复杂度是学习算法的基石&#xff0c;今天我们来聊聊为什么要引入时间复杂度&#xff0c;什么是时间复杂度以及如何去算一个算法的时间复杂度 一、刻画算法的运行时间 某日&#xff0c;慧能叫来了一尘打算给他补习补习一下基础知识&#xff0c;只见克写了一段非常简单的代码…

pytorch—torch.tensor.scatter操作解析

torch.Tensor.scatter_(dim, index, src, reduceNone) 理解scatter操作: tensor_A.scatter_(dim, index, tensor_B): tensor_B的每个元素&#xff0c;都按照 index 被scatter&#xff08;可以理解为填充&#xff09;到目标tensor_A中。 (1) index和源tensor_B维度一致; (2) t…

python scatter参数详解_python matplotlib.scatter 用法

# -*- coding: utf-8 -*- #导入模块 from matplotlib import pyplot as plt import numpy as np import pprint from math import pi,sin A1np.array([0,0]) B1np.array(([2,0],[0,2])) #以 A1为均值&#xff0c;B1为协方差矩阵&#xff0c;生成正态分布的随机数 每次生…

pytorch scatter和scatter_详解

文章目录 0. Introduction1. 定义2. 详解例1例2 Reference&#xff1a; 0. Introduction scatter() 和 scatter_() 的作用是一样的&#xff0c;只不过 scatter() 不会直接修改原来的 Tensor&#xff0c;而 scatter_() 会 PyTorch 中&#xff0c;一般函数加下划线代表直接在原来…

Pytorch中scatter与gather操作

文章目录 数据发散scatter带聚集的发散scatter_add_onnx中scatterND数据聚集gather 数据发散scatter 函数原型pytorch官方文档scatter_&#xff1a; scatter_(dim, index, src) → Tensor注&#xff1a; scatter_是scatter的就地操作。 对于一个三维的张量来说&#xff0c;张…

pytorch中scatter()、scatter_()详解

scatter()、scatter_() scatter() 和 scatter_() 的作用一样。 不同之处在于 scatter() 不会直接修改原来的 Tensor&#xff0c;而 scatter_() 会在原来的基础上对Tensor进行修改。 torch.scatter()官方文档 scatter(dim, index, src)将src中数据根据index中的索引按照dim的…

torch_scatter.scatter()的使用方法详解

目录 1. 参数2. 示例2.1 简单示例2.2 顺序问题2.3 维度问题 1. 参数 具体来讲&#xff0c;scatter函数的作用就是将index中相同索引对应位置的src元素进行某种方式的操作&#xff0c;例如sum、mean等&#xff0c;然后将这些操作结果按照索引顺序进行拼接。下面我用具体的例子来…

torch.scatter

本文目录 一、函数简介二、二维举例三、详解执行过程1. 第一步2. 第二步3. 第三步4. 问题 一、函数简介 torch.scatter(input, dim, index, src) dim ([int]) – the axis along which to indexindex (LongTensor) – the indices of elements to scatter, can be either emp…

Python中的scatter

假设X与Y&#xff0c;其中X是5X2矩阵 关于X_demo[Y_demo0 , 0],是一种获取子矩阵的方式 因为Y_demo取值只是0与1&#xff0c;可以看做一个布尔数组&#xff0c; 在X_demo[取Y_demo中为0的行&#xff0c;只取第0列] 正好对应 而在scatter(横坐标&#xff0c;纵坐标) 现在已经…

scatter python_Python中scatter()函数--转载

原博文 2017-05-13 20:46 − 原博地址:http://blog.csdn.net/anneqiqi/article/details/64125186 最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1、scatter函数原型 2、其中散点的形状参数marker如下:... 相关推荐 …

scatter python_python中的scatter()方法

1、scatter函数原型 2、其中散点的形状参数marker如下&#xff1a; 3、其中颜色参数c如下: 4、基本的使用方法如下&#xff1a; #导入必要的模块 importnumpy as np importmatplotlib.pyplot as plt #产生测试数据 x np.arange(1,10) y x fig plt.figure() ax1 fig.a…

scatter python_Python的散点图绘制 scatter

python能画的图种类非常多&#xff0c;而且看上去都很好看&#xff0c;具体种类部分可参看&#xff1a;https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure 这里主要是探索下散点图绘制。 1. 首先是导入包&#xff0c;创建数据 imp…

scatter python_Python scatter详解

函数原型:matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None, alpha=None, linewidths=None,verts=None, edgecolors=None, hold=None, data=None,**kwargs) 参数作用如下: x, y位置。 s大小。 c颜色,可能的情况…

scatter

scatter 散点图 全页折叠 语法 scatter(x,y) scatter(x,y,sz) scatter(x,y,sz,c) scatter(___,filled) scatter(___,mkr) scatter(___,Name,Value) scatter(ax,___) s scatter(___) 说明 示例 scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形的散点图。该类型的图形也…

py使用scatter画散点/气泡图

本博文源于《python数据可视化》&#xff08;黑马程序员编著&#xff09;。旨在讲解python如何使用scatter函数进行绘画散点图和气泡图。先讲解scatter函数参数如何使用&#xff0c;然后再演示两个例子进行绘画散点图和气泡图 scatter函数参数讲解 scatter(x,y,sNone,cNone,m…

ComposeOptions.kotlinCompilerVersion is deprecated

我为我的 Compose 工程升级 AGP 后 &#xff08;7.0.0 > 7.0.2&#xff09;重新编译发生下面错误 ComposeOptions.kotlinCompilerVersion is deprecated. Compose now uses the kotlin compiler defined in your buildscript. 以前需要通过该 composeOptions 指定 Kotlin 版…

比 Java 更强大的 kotlin.Deprecated

我们都知道 Java 有一个java.lang.Deprecated注解&#xff0c;用来将一个 API 标记为“废弃”&#xff0c;或者说“不建议使用”。比如 String 类就有一个被标记为 Deprecated的构造函数&#xff1a; Deprecated public String(byte ascii[], int hibyte) {this(ascii, hibyte…

Android IntentService deprecated|笔记

先回顾一下&#xff0c; 面试一般都喜欢问IntentService 原理&#xff0c; 个人觉的啥是原理&#xff0c;不就是源码吗&#xff1f; 就下面几行源码&#xff0c;就能出滋生出来&#xff0c;几道面试题&#xff1a; 什么IntentService继承service阿&#xff0c;自带looper阿&…

java 注解 @Deprecated

目录 一 笔记二 Deprecated 源码三 定义一个已过时的类 AnnotationTest03_User.java四 使用自定义的过时注解类 一 笔记 Deprecated 可以标注很多元素&#xff1a;类、接口、方法、属性。。。。。。 这个注解也是给编译器看的&#xff0c;也是做编译检查的&#xff1b;被这个…