此为自己学习课程的笔记,供自己复习用。
前言
为了表示代码在不同情况下的不同时间复杂度,那么需要如下三个概念:
- 最好情况时间复杂度
- 最坏情况时间复杂度
- 平均情况时间复杂度
一、最好、最坏情况时间复杂度
- 最好情况时间复杂度:在最理想的情况下,执行这段代码的时间复杂度
- 最坏情况时间复杂度:在最糟糕的情况下,执行这段代码的时间复杂度
二、平均情况时间复杂度
由于最好、最坏情况时间复杂度都是在比较极端的情况下的代码复杂度,为了表示平均情况下的时间复杂度,就需要用到平均时间复杂度。
计算方法:每种情况下的复杂度✖️每种情况发生的概率,然后再把它们加和。(即为求期望值)
一般情况下,我们使用一个复杂度就可以满足需求了。
只有同一块代码在不同的情况下,时间复杂度有量级的差距,我们才会使用上面这三种复杂度表示法来区分
三、均摊时间复杂度
平均复杂度只在某些特殊情况下才会用到,
而均摊时间复杂度应用的场景比它更加特殊、更加有限
当一段代码中,不同情况的时间复杂度出现的频率是有规律的,而且有一定的前后时序关系时,可以通过均摊的方法,将时间复杂度较高的情况均摊到时间复杂度较低的情况,此时就得到了均摊时间复杂度。
摊还分析(又叫平摊分析):对于一个数据结构进行一组连续的操作中,大部分情况下时间复杂度都比较低,只有少数情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系。这时,可以将这组操作放在一起分析,看看能否将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上。
在能够应用均摊时间复杂度分析的场合,一般均摊时间复杂度就等于最好情况时间复杂度。
总结
引入这几个复杂度概念,是因为在同一段代码,在不同输入的情况下,复杂度量级有可能是不一样的。