1.什么是算法复杂度
精简的说就是:你的程序(代码)执行时所需要调用的空间资源以及所需要花费的时间。时间复杂度主要衡量这个算法的运行快慢,空间复杂则是衡量这个算法运行所需要的额外空间,这两点决定了算法的好坏。
2.时间复杂度
时间复杂度是一种用来衡量算法运行时间的度量方式。它表示随着输入规模的增大,算法执行所需的时间增长的速度。时间复杂度通常用大O符号(O)来表示。
具体来说,时间复杂度描述的是算法执行所需的基本操作次数或者步数,而不是实际的执行时间。它是一个函数,表示为T(n),其中n表示输入规模。时间复杂度可以用来比较不同算法之间的效率,以及预测算法在不同规模输入下的执行时间。
常见的时间复杂度包括:
O(1):常数时间复杂度,表示算法的执行时间不随输入规模的增大而增加。
O(log n):对数时间复杂度,表示算法的执行时间随着输入规模的增大而增加,但是增长速度很慢。
O(n):线性时间复杂度,表示算法的执行时间与输入规模成正比。
O(n log n):线性对数时间复杂度,表示算法的执行时间随着输入规模的增大而增加,但是增长速度比线性时间复杂度快。
O(n^2):平方时间复杂度,表示算法的执行时间随着输入规模的增大而增加,增长速度较快。
O(2^n):指数时间复杂度,表示算法的执行时间随着输入规模的增大而急剧增加,增长速度非常快。
需要注意的是,当我们在求一个算法的时间复杂度时,只关注算法的执行时间与输入规模之间的关系,而不考虑具体的常数因子。因此,在比较不同算法的效率时,可以忽略掉低阶项和常数项
3.空间复杂度
空间复杂度是一种用来衡量算法所需的额外内存空间的度量方式。它表示随着输入规模的增大,算法执行所需的额外内存空间的增长速度。空间复杂度通常用大O符号(O)来表示。
具体来说,空间复杂度描述的是算法执行所需的额外内存空间的大小,而不是算法本身的存储空间。它是一个函数,表示为S(n),其中n表示输入规模。空间复杂度可以用来比较不同算法之间的内存使用效率,以及预测算法在不同规模输入下所需的额外内存空间。
常见的空间复杂度包括:
O(1):常数空间复杂度,表示算法的额外内存空间使用量不随输入规模的增大而增加。
O(n):线性空间复杂度,表示算法的额外内存空间使用量与输入规模成正比。
O(n^2):平方空间复杂度,表示算法的额外内存空间使用量随着输入规模的增大而增加,增长速度较快。
O(log n):对数空间复杂度,表示算法的额外内存空间使用量随着输入规模的增大而增加,但增长速度较慢。
需要注意的是,空间复杂度只关注算法执行过程中所需的额外内存空间的增长情况,而不考虑算法本身所需的存储空间。同时,空间复杂度也可以通过优化算法的内存使用方式来减少额外内存空间的使用量。
4.总结:
通常当我们去计算时间或空间复杂度的时候,一般来说计算的都是在最坏情况下得到的,时间或空间复杂度的取值。
时间和空间这两种复杂度是互相独立的度量方式去计算,当我们在选择算法的时候,要综合考虑时间和空间的需求,以求算法的最优解。
本期的内容就是以上这些啦,希望大家动动小手指,给博主一键三连,大家的支持是我前行的最大动力。