【算法性能学习笔记】时间复杂度与空间复杂度理解与基本计算

时间复杂度

基本定义

时间复杂度是一个函数,它定性描述该算法的运行时间。
假设算法的问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这称作为算法的渐近时间复杂度,简称时间复杂度,记为 T(n)=O(f(n))
大O表示上界。

不同数据规模的差异

如下图中可以看出不同算法的时间复杂度在不同数据输入规模下的差异。
在这里插入图片描述
大O就是数据量级突破一个点且数据量级非常大的情况下所表现出的时间复杂度,这个数据量也就是常数项系数已经不起决定性作用的数据量。所以我们说的时间复杂度都是省略常数项系数的,是因为一般情况下都是默认数据规模足够的大,基于这样的事实,给出的算法时间复杂的的一个排行如下所示:

O(1)常数阶 < O(logn)对数阶 < O(n)线性阶< O(nlogn)n对数阶< O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶<O(n!)阶乘对数阶< O(n^n)n次方阶

但是也要注意大常数,如果这个常数非常大,例如10^7 ,10^9 ,那么常数就是不得不考虑的因素了。

复杂表达式的化简

例:

O(2*n^2 + 10*n + 1000)

去掉运行时间中的加法常数项 (因为常数项并不会因为n的增大而增加计算机的操作次数)

O(2*n^2 + 10*n)

去掉常数系数

O(n^2 + n)

只保留保留最高项,去掉数量级小一级的n (因为n^2 的数据规模远大于n),最终简化为:

O(n^2)

循环中的时间复杂度计算

一层循环

(1)找出循环趟数t、每轮循环i值;
(2)找出t与i的关系;
(3)循环停止条件;
(4)联立2、3求解

两层循环

(1)外循环中i的变化值;
(2)内层语句执行次数;
(3)内层求和(外层次数);

三层循环

(1)抽象为三维体积求解(1/3sh);
(2)列式求和

循环中的时间复杂度视频讲解及例题


空间复杂度

基本定义

空间复杂度是对一个算法在运行过程中占用内存空间大小的量度,记做S(n)=O(f(n)
空间复杂度是考虑程序运行时占用内存的大小,而不是可执行文件的大小。
空间复杂度是预先大体评估程序内存使用的大小。

更多参考

算法空间复杂度

猜你喜欢

转载自blog.csdn.net/yolo_______95/article/details/127341274