时间复杂度计算-例题集合

article/2025/11/11 7:58:27

在这里插入图片描述在这里插入图片描述

    • 一、常数阶
    • 二、线性阶
    • 三、对数阶
    • 四、平方阶
    • 五、多个复杂度组合:顺序结构
    • 六、多个复杂度组合:选择结构
    • 七、多个复杂结构:嵌套结构
    • 八、递归

)

一、常数阶

// 常数阶 
int result = 100; //运行程序只执行一次  result ++ ;  //执行一次System.out.println ("Hello!"+result); //执行一次 

上面算法的运行的次数的函数为f(n)=3,根据推导大O阶的规则1,每次运行程序每条语句执行一次,所以这个算法的时间复杂度仍旧是O(1),我们可以称之为常数阶。

例:

void fun4(int N) {int count = 0; for (int k = 0; k < 100; k++) {++count;}printf("%d\n", count);
}

fun3的基本操作的执行了100次,通过推导大O阶方法知道,时间复杂度为O(1)。

二、线性阶

//线性阶for(int i=0;i<n;i++){System.out.println(result[i]);  //执行一次}

线性阶主要要分析循环结构的运行情况。
上面算法循环体中的代码执行了n次,因此时间复杂度为O(n),实际上,在for循环里面的所有时间复杂度为O(1)的语句总的时间复杂度都是O(n)。

三、对数阶

// 对数阶int result=1;while(result<n){result=result*2; //时间复杂度为O(1)}

可以看出上面的代码, result=result*2; 随着result每次乘以2后,都会越来越接近n,当result大于等于n时就会退出循环(限制条件)

如果循环的次数为T,所以2^T=n于是T=log₂n,因此得出这个算法的时间复杂度为O(logn)。

例题:在这里插入图片描述
二分查找

//二分查找法
int BinarySearch(int* a, int  n, int x) {assert(a);int begin = 0;int end = n - 1;while (begin < end) {int mid = ((end - begin) >> 1) + begin; //计算end与begin的中间值,右移1位相当于除以2if (a[mid] < x) {begin = mid - 1;}else if(a[mid]>x){end = mid;}else {return mid;}}return -1;
}

对于BinarySearch函数来说,它存在

最好情况:执行1次
最坏情况:约执行logN次,这里的logN是以2为底,以N为对数。

这里我们考虑最坏情况,时间复杂度为:O(logN)。分析如下:

第一次查找:在长度为N的数组中查找值,取中间值进行比较第二次查找:在长度为N/2的数组中查找值,取中间值进行比较第三次查找:在长度为N/(2^2)的数组中查找值,取中间值进行比较
…
第logN次查找:在长度为N/(2^logN)的数组中查找值,即在长度为1的数组中查找,无论是否找到均跳出循环,结束查找。

四、平方阶

4.1

    // 平方阶for(int i=0;i<n;i++){       for(int j=0;j<n;i++){     System.out.println(result[i][j]);  //执行一次     }     }

这是一个循环嵌套的语句,很明显内层循环的时间复杂度在讲到线性阶时就已经得知是O(n),又经过了外层循环n次,那么这段算法的时间复杂度则为O(n²)。

4.2

void fun(int n){int i,j,x=0;for(i=1;i<n;i++){for(j=n;j>=i+1;j--){x++;}}
}

在这里插入图片描述
4.3

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

在这里插入图片描述4.4在这里插入图片描述4.5
在这里插入图片描述4.6冒泡排序

void Swap(int* a, int* b) {int c = *a;*a = *b;*b = c;
}//冒泡排序 --从小到大
void BubbleSort(int* a, int n) {assert(a);//异常处理for (int end = n; end > 0; --end) {int exchange = 0;for (int i = 1; i < end; ++i) {if (a[i - 1] > a[i]) {//两个数据进行比较,前面一个数据大于后一个数据Swap(&a[i - 1], &a[i]);exchange = 1;}}//如果遍历整个数组,发现没有数据进行交换,即每个元素均小于等于后一个元素//则无须在进行排序,直接结束循环即可if (exchange == 0)break;}
}

对于BubbleSort函数来说,它存在

最好情况:数组为顺序,执行N次
最坏情况:数组为逆序,执行N*(N+1)/2次

五、多个复杂度组合:顺序结构

// 多个复杂度组合for(int i=0;i<n;i++){   for(int j=0;j<n;i++){ System.out.println(result[i][j]);  //执行一次 } 
}for(int i=0;i<n;i++){  System.out.println(result[i]);  //执行一次 
}

对于顺序执行的语句或者算法,总的时间复杂度等于其中最大的时间复杂度。所以对于以上的代码,时间复杂度为O(n²)。

六、多个复杂度组合:选择结构

// 多个复杂度组合
if(flag){ for(int i=0;i<n;i++){  for(int j=0;j<n;i++){ System.out.println(result[i][j]);  //执行一次 } } 
}else{ for(int i=0;i<n;i++){   System.out.println(result[i]);  //执行一次 } 
}

对于条件判断语句,总的时间复杂度等于其中时间复杂度最大的路径的时间复杂度。所以对于以上的代码,时间复杂度为O(n²)。

七、多个复杂结构:嵌套结构

void fun(int n){int i,k;for(i=1;i<=n;i++){for(j=1;j<=n;j++){k=1;while(k<=n){k = 5*k;}}}
}

八、递归

//求阶乘
long long Factorial(int N) {return N < 2 ? N : N * Factorial(N - 1) ;
}

在这里插入图片描述在这里插入图片描述

//斐波那契函数
long long Fibonacci(int N) {return N < 2 ? N : Fibonacci(N - 1) + Fibonacci(N - 2);
}

Fibonacci函数的时间复杂度为O(2^N),分析过程如下:
在这里插入图片描述


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

相关文章

时间复杂度详解

目录 一. 时间复杂度概念 例题1: 二. 推导大O阶 三. 几种常见的时间复杂度: 3.1常数阶: 3.2线性阶: 例题2: 3.3对数阶 3.4 平方阶: ​编辑 例题3:​编辑 解题思路: 变式1: 3.5 总结 四、空间复杂度 4.1 空间复杂度O(1) 4.2空间复杂度O(n) 例题4&#xff1a;数字…

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

写在前面&#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阿&…