算法复杂度分析

概要

复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率和数据规模之间的增长关系,常见的复杂度有:$ O(1),O(logn),O(n),O(nlogn) , O(n^2) $。

时间复杂度

大O符号

$$ T(n)=O(f(n)) $$

表示所有代码的执行时间T(n)与每行代码的执行次数n成正比。大O时间复杂度实际上并不具体代表代码真正执行时间,而是表示代码执行时间随数据增长的变化趋势,也称为渐进时间复杂度,简称时间复杂度。

时间复杂度分析技巧

1.只关心循环执行次数最多的一段代码

2.加法法则:总复杂度等于量级最大的那段代码的复杂度(当量级不确定时不可简单这样计算)

3.乘法法则:(嵌套代码的复杂度等于嵌套内外代码的复杂度的乘积)

关于时间复杂度的更多内容

1.最好情况时间复杂度

在最理想情况下,执行这段代码的时间复杂度。

2.最坏情况时间复杂度

在最坏情况下,执行这段代码的时间复杂度。

3.平均情况时间复杂度

把每种情况发生的概率考虑进去,对发生的所有情况的耗时做加权平均,得到的期望值,它的量级称为加权平均时间复杂度。

以上三种时间复杂度,当在同一块代码中不同情况下,时间复杂度有量级的差距,才加以区分。

4.均摊时间复杂度

对于一个数据结构进行一组连续操作中,大部分情况下时间复杂度很低,个别情况下时间复杂度很高,而且这些操作之间存在前后连贯的时序关系,这时可以把这组操作放在一块分析,看能否把较高时间复杂度的操作的耗时均摊到其他的时间复杂度低的操作上。 ** 一般均摊时间复杂度等于最好情况时间复杂度 **。

空间复杂度

空间复杂度全称是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系。常见的空间复杂度有 $ O(1),O(n),O(n^2)$

updatedupdated2019-12-282019-12-28