复杂度分析笔记下
作者:互联网
最好、最坏、平均、均摊时间复杂度
最好情况复杂度分析:
在最理想的情况下执行这段代码的时间复杂度
最坏情况复杂度分析:
在最糟糕的情况下执行这段代码的时间复杂度
加权平均情况复杂度(也叫期望时间复杂度)
在所有情况(需要乘以这种情况发生的概率)的复杂度之和在除以情况的个数
均摊时间复杂度
通过摊还分析得到的时候见复杂度
在整个过程中大多情况出现低阶复杂度和偶现高阶复杂度的情况下,将高阶均摊到周期内的低阶上,然后求连续复杂度。(有规律出现)
// 全局变量,大小为 10 的数组 array,长度 len,下标 i。
int array[] = new int[10];
int len = 10;
int i = 0;
// 往数组中添加一个元素
void add(int element) {
if (i >= len) { // 数组空间不够了
// 重新申请一个 2 倍大小的数组空间
int new_array[] = new int[len*2];
// 把原来 array 数组中的数据依次 copy 到 new_array
for (int j = 0; j < len; ++j) {
new_array[j] = array[j];
}
// new_array 复制给 array,array 现在大小就是 2 倍 len 了
array = new_array;
len = 2 * len;
}
// 将 element 放到下标为 i 的位置,下标 i 加一
array[i] = element;
++i;
}
分析其:最好、最坏、平均、均摊时间复杂度
最好:
刚好有空间:时间复杂度为O(1)
最坏:
空间不够需要重新分配:时间复杂度为:O(n)
平均:
在分析时间复杂度是O(1)还是O(n)的时候如果出现O(1)的次数远大于出现O(n)出现的次数,那么平均平摊时间复杂度就是O(1)。不过我们一般情况下平均 均摊说一个就好了
均摊只是其中一种复杂度度量方法,并不是说我们只关注均摊,不关注最坏。我们评价一段代码或者算法的时候,还是会综合这几种复杂度的。用什么表示复杂度不重要,初衷还是能更好的体现出这个算法或者代码的性能。
标签:分析,int,复杂度,笔记,len,new,array,均摊 来源: https://blog.csdn.net/weixin_38798865/article/details/99857969