时间和空间复杂度

简介: 时间和空间复杂度

算法的复杂度

时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。

时间复杂度

时间复杂度是一个函数。一个算法所花费的时间与其中语句的执行次数成正比,算法中的基本操作的执行次数,为算法的时间复杂度。

大O的渐进表示法
大O符号:用于描述函数渐进行为的数学符号。

推导大O阶方法:
1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数。得到的结果就是大O阶。
大O的渐进表示法去掉了对结果影响不大的项,简洁表示出了执行次数。
注意:
·O(1)并不是代表1次,而是常数次。
·大O渐进表示法只是估算。
另外有些算法的时间复杂度存在最好,平均,最坏的情况:
·最坏情况:任意输入规模的最大运行次数(上界)。
·平均情况:任意输入规模的期望运行次数
·最好情况:任意输入规模的最小运行次数(下界)
例如:在一个长度为N的数组中搜索一个数据x

最好情况:1次找到

最坏情况:N次找到

平均情况:N/2次找到

在实际中,一般只关注最坏运行情况,所以它的时间复杂度为O(N)。

各种求时间复杂度例题:

计算冒泡排序的时间复杂度:

image.png

计算两个循环的时间复杂度:

image.png

计算二分查找的时间复杂度:

image.png
注意:在c语言中logN的底数默认是2。

计算阶乘递归的时间复杂度:

image.png
下面是变式:
image.png

计算斐波那契递归的时间复杂度:

image.png
image.png

空间复杂度

空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度。

空间复杂度算的是变量的个数,计算规则也使用大O渐进表示法。

注意:函数运行时所需要的栈空间(存储参数,局部变量,一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定。

各种求空间复杂度的例题:

求冒泡排序的空间复杂度:

image.png

求斐波那契数列的空间复杂度

image.png

算法常见复杂度:

image.png

目录
相关文章
|
2月前
|
搜索推荐 算法
插入排序算法的平均时间复杂度解析
【10月更文挑战第12天】 插入排序是一种简单直观的排序算法,通过不断将未排序元素插入到已排序部分的合适位置来完成排序。其平均时间复杂度为$O(n^2)$,适用于小规模或部分有序的数据。尽管效率不高,但在特定场景下仍具优势。
|
2月前
|
存储 算法
时间与空间复杂度(详解)(下)
时间与空间复杂度(详解)(下)
39 3
|
2月前
|
机器学习/深度学习 算法
时间与空间复杂度(详解)(上)
时间与空间复杂度(详解)(上)
45 1
|
4月前
|
机器学习/深度学习 存储 算法
算法时间复杂度分析
这篇文章讲解了如何分析算法的时间复杂度,包括关注循环执行次数最多的代码段、总复杂度的确定、嵌套代码复杂度的计算方法,并提供了大O阶的推导步骤和常见时间复杂度的列表,同时还介绍了空间复杂度的概念及其重要性。
|
7月前
|
C++
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
2589. 完成所有任务的最少时间(区间取点——贪心or线段树)
算法的时间、空间复杂度如何比较?
算法的时间、空间复杂度如何比较?
|
7月前
|
机器学习/深度学习 算法
3.最好、最坏、平均、均摊时间复杂度
3.最好、最坏、平均、均摊时间复杂度
131 1
|
存储
时间、空间复杂度的例题详解(下)
时间、空间复杂度的例题详解(下)
65 0
|
算法
时间、空间复杂度的例题详解(上)
时间、空间复杂度的例题详解(上)
105 0
|
机器学习/深度学习 算法
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度
149 0
【入门篇】2 # 复杂度分析(下):浅析最好、最坏、平均、均摊时间复杂度

热门文章

最新文章