时间复杂度与空间复杂度(算法与数据结构)

算法的时间复杂度

分析一个算法的时间复杂度步骤:
1.用常数1取代运行时间中的所有加法常数。
2.在修改后的运行次数函数中,只保留最高阶项。
3.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
4.得到的最后结果就是大O阶。
①常数阶:O(1)
②线性阶:O(n)
③平方阶:循环的时间复杂度等于循环体的复杂度,以该循环运行的次数为幂,例如O(n^2)
④对数阶:O(logn)

常用的时间复杂度所耗费的时间从小到大依次是:
O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
注:通常除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

算法的空间复杂度

计算方法:
1.忽略常数,用O(1)表示;
2.递归算法的空间复杂度=递归深度N* 每次递归所要的辅助空间;
3.对于单线程来说,递归有运行时堆栈,求的是递归最深的那一次压栈所耗费的空间的个数,因为递归最深的那一次所耗费的空间足以容纳它所有递归过程。

注:变量的内存分配发生在定义的时候,
temp定义在循环里边:n * O(1);
temp定义在循环外边:1 * O(1) 。
调用fun函数,每次都创建1个变量k:O(n)。

常用算法的时间复杂度和空间复杂度

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiaokeaiuiya/article/details/109010681