上篇中的常见复杂度分析O(1)、O(logn)、O(n)、O(nlogn)外,还有更细致的分析方法
4种更细致的时间复杂度方法
- 最好情况时间复杂度(best cast time complexity)
- 最坏情况时间复杂度 (worst case time complexity)
- 平均情况时间复杂度 (average case time complexity)
- 均摊时间复杂度 (amortized time complexity)
最好、最坏情况时间复杂度
int find(int[] array, int n, int x)
{
int i = 0;
int pos = -1;
for (; i < n; i++)
{
if (array[i] == x) {
pos = i;
break;
}
}
return pos;
}
- 这段代码与之前不同的地方在于,它的时间复杂度不单单取决于n,还取决于x的值
- 最好情况下,只需要查找一次即可,所以最好情况时间复杂度为O(1)
- 最坏情况下,需要搜索数组所有元素,所以最坏情况复杂度为O(n)
- 所以这个算法,不能单单说时间复杂度为O(1) 或 O(n)
平均情况时间复杂度
绝对平均值
期望平均值(加权平均值)
- 在数组内的概率为1/2
- 0到n-1中任意位置的概率为1/(2n)
绝对平局值和期望平均值的时间复杂度都为O(n),但还是有区别
一般我们指的平均时间复杂度是指期望平均值
均摊时间复杂度
- 每种情况的时间复杂度O(1)
- 将n+1种情况发生的概率1/(n+1)相加
- 均摊时间复杂度为O(1)
- 由于平均时间复杂度计算太过细致,可以使用均摊时间复杂度来计算