首页 > 编程语言 >算法的时间、空间复杂度如何比较?

算法的时间、空间复杂度如何比较?

时间:2022-12-30 17:01:43浏览次数:43  
标签:量级 复杂度 算法 时间 代码执行 空间

一、时间复杂度BigO

首先我们不能以机器运行算法的时间来评判一个算法的时间复杂度,因为即使是相同的算法在不同机器上(机器的个体差异性)运行时间都可能不尽相同,因此我们采用

【大O表示法】——算法的渐进复杂度T(n)=O(f(n))

        首先解读这个公式,f(n)表示代码执行的次数,O表示正比例关系,而T(n)就表示算法的渐进复杂度(就是当一个问题量级增加的时候,算法运行时间增长的一个趋势)。

例题辨析

for(int i=1;i<=n;i++)
{
x++;
}

请问这个代码块执行几次?

答:3N+1次

解析:

首先开头定义i=1,执行一次,后面在循环中就不参与,而i<=n,x++,i++各执行N次,所以相加就是3N+1次。

O(3N+1)=O(N),因为这个公式计算的是当n无限接近于正无穷时,可以省略1和3.

算法的时间、空间复杂度如何比较?_O表示法

上面的代码执行N^2次

算法的时间、空间复杂度如何比较?_O表示法_02

上面的代码原则上是执行N+N^2次,而又因为N是趋近于无穷的,所以最终结果就是N^2次,即O(N+N^2)=O(N^2)

常用的时间复杂度量级

算法的时间、空间复杂度如何比较?_空间复杂度_03

横坐标表示代码执行的次数,纵坐标表示时间复杂度量级。

从图中不难看出,n!、2n\、n2时间复杂度都是指数级的,因此代码运行的非常慢。

1、O(1)

算法的时间、空间复杂度如何比较?_O表示法_04

上面代码时间复杂度是O(1),因为当其中变量的值增加到任何值,本质交换两个数的值,时间复杂度就是O(1)

2、O(n)

算法的时间、空间复杂度如何比较?_时间复杂度_05

这时复杂度就取决于n的大小


3、O(log n)

算法的时间、空间复杂度如何比较?_O表示法_06

这其实是一道数学题,就是2^k=n,求k

两边同取对数,答案即为log n(注意此时的底数都可以忽略不计)


4、O(nlog n)

算法的时间、空间复杂度如何比较?_时间复杂度_07

比较容易理解,外面套了一层循环,就是在原来的基础上*n。

5、o(m*n)

算法的时间、空间复杂度如何比较?_时间复杂度_08

就是for循环嵌套,俗称套娃。


二、空间复杂度

空间复杂度自然也不是计算空间的大小,而是内存空间增长的趋势

常用的空间复杂度

O(1)、O(n)、O(n^2)

1、O(1)

算法的时间、空间复杂度如何比较?_空间复杂度_09


无论xy增加到多少,内存分配还是不变,因此还是O(1)

2、O(n)

算法的时间、空间复杂度如何比较?_空间复杂度_10

随着n的增加,对数组分配的空间也增多

三、总结

时间空间复杂度=时间和空间增长的复杂度


标签:量级,复杂度,算法,时间,代码执行,空间
From: https://blog.51cto.com/u_15740457/5979035

相关文章

  • m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析
    1.算法概述蜂窝网络不仅需要能够为用户提供高质量的语音服务,而且要能够提供大量的数据传输服务,这就决定了蜂窝网络的发展必须要进一步提高系统容量和高速数据速率覆盖,而传......
  • m虚拟MIMO系统的配对调度算法的matlab仿真,对比Random配对,Orthogonal配对以及Detemin
    1.算法概述利用多输入多输出(MIMO,MultipleInputMultipleOutput)技术通过空间复用能够显著的提高通信系统的容量,并可以很好的缓解时/频资源日益紧张的现状。该技术在L......
  • m基于matlab的站点休眠中继CDMA网络动态节能控制算法仿真与性能分析
    1.算法概述      蜂窝网络不仅需要能够为用户提供高质量的语音服务,而且要能够提供大量的数据传输服务,这就决定了蜂窝网络的发展必须要进一步提高系统容量和高速数据......
  • 基于局部直方图相关算法的近似优化和提速。
    基于局部直方图的算法有很多很多,我们已经研究这类算法有以下一些:1、中值滤波2、表面模糊3、选择性模糊4、中值锐化5、图像局部熵   ......
  • 《程序与算法》课程设计(论文)指导书[2022-12-30]
    《程序与算法》课程设计(论文)指导书[2022-12-30]《程序与算法》课程设计(论文)指导书一、设计目的使学生具备理论联系实际的程序设计思想,掌握数据与结构中线性表和二叉树和......
  • 每日算法之和为S的连续正数序列
    JZ74和为S的连续正数序列题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续......
  • 手撕fft算法--fft原理和源码解析
    一前言 在音频信号处理中,fft变换是一个无法绕过过去的存在。借着一次算法出来的机会,把fft熟悉一下不为过啊。 二问题 这里,其实是由一个问题驱动的,那......
  • 修改Oracle数据表空间存储位置
    查看数据文件的存储路径:SQL>selectnamefromv$datafile;NAME--------------------------------------------------------------------------------/home/oracle/app......
  • AI算法玩转象棋
    大家好我是毕加锁(锁!)今天教大家python象棋AI算法一,棋子的着法com.bylaw={}(1)车:com.bylaw.c=function(x,y,map,my){vard=[];//左侧检索若存在棋子且颜色不同则......
  • 泛型算法
    1、迭代器令算法不依赖于容器,但算法依赖于元素类型的操作。2、算法可能改变容器中保存元素的值,也可能在容器内移动元素,但永远不会直接添加或删除元素。3、那些只接受一个......