直接给出代码,下面的四种情况都算一下
// n 表示数组的长度, x 表示一个任意数字
int find(int[] array, int x) {
for (int i = 0; i < n; ++i) {
if (array[i] == x) {
pos = i;
break;
}
}
return pos;
}
-
最好情况时间复杂度
顾名思义:最好情况时间复杂度就是在最理想的情况下,执行这段代码的时间复杂度。
上面的这段代码,最好的情况就是数组的第一位就等于x,那么这段代码的最好情况时间复杂度就是O(1)。
-
最坏情况时间复杂度
同理:最坏情况时间复杂度就是在最坏的情况下,执行这段代码的时间复杂度。
上面的这段代码,最坏的情况就是数组中不存在同x 相等的数字,那么这段代码的最坏情况时间复杂度就是O(n);
-
平均情况时间复杂度
含义:平均情况事件复杂的计算需要把各种情况出现的时间复杂度考虑进去,然后相加得到。这个值就是概率论中的加权平均值,也叫期望值,所以平均时间复杂的全称应该叫做加权平均时间复杂度或者期望时间复杂度。
-
均摊时间复杂度
解释:均摊时间复杂度是平均情况时间复杂度中特殊的一种,它有一个对应的计算方式,叫做摊还分析法(或者叫平摊分析),即把复杂度最高的一种情况分摊到其它情况下计算出来的时间复杂度。
适合均摊时间复杂度的算法有它的特征,特征就是对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系。
总结:最好和最坏情况时间复杂度都是极端情况下的代码复杂度,发生的概率其实并不大。平均情况时间复杂度遇到的概率也不高,均摊时间复杂度遇到的概率就更低了,但是能够了解学会更好。在这方面,平均情况时间复杂度和均摊时间复杂度我理解的还不够深,大概用语言描述了下,没有进行代码复杂度分析,掌握好第一天的内容就可以了。
今天就到这儿了,明天周末,好不容易熬到了周末,周末愉快!!!!!