分析、统计算法的执行效率和资源消耗
一、时间复杂度分析
- 只关注循坏次数最多的一段代码;
- 加法法则:总的时间复杂度就等于量级最大的那段代码的时间复杂度,T(n)=T1(n)+T2(n)=max(O(f(n));
- 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积;
- 常见时间复杂度分析:
二、空间复杂度分析
- 空间复杂度和时间复杂度在分析方法上一样,区别在于时间复杂度分析的是代码的执行时间和数据规模的增长关系,空间复杂度分析的是代码的存储空间与数据规模的增长关系;
三、最好、最坏、平均、均摊时间复杂度分析
我们根据下列代码来分析
// n 表示数组 array 的长度
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;
}
1.最好和最坏时间复杂度分析都是极端情况下的代码复杂度,发生的概率并不大;
2.最好时间复杂度为O(1),最坏时间复杂度为O(n);
3.平均时间复杂度分析:我们根据上面代码分析,元素x在数组中的位置有n+1种情况:*在数组的 0~n-1 位置中和不在数组中,需要将每种情况下需要遍历的元素加起来,同时在数组中的和不在数组中的概率均为1/2,并且元素x出现在数组中的每个位置的概率为1/n,因此算式如下: