1、大O复杂度表示法
1.1、从维度划分
从维度划分可分为:时间复杂度、空间复杂度
1.1.1、时间复杂度
概念
代码执行时间随数据规模增长的变化趋势
多项式量级复杂度分析规则(非多项式量级不常见暂不考虑)
顺序相加,嵌套相乘,取最高阶
阶数排序
幂阶()>线性对数阶()>线性阶()>对数阶()>常数阶(1)
举例
int a=0;
for(int i=0;i<n;i++){
a=a+1;
for(int j=0;j<n;j++){
a=a+2;
}
}
int b=1;
while(b <= n){
b=b*10;
}
第一行:执行1次
第二行:循环执行n次
第三行:循环执行n次
第四行:循环执行次
第五行:循环执行次
第八行:循环执行次
总计:次,取最高阶T(n)=O()
1.1.2、空间复杂度
概念
算法的存储空间随数据规模增长的变化趋势
举例
int[] arr = new int[n];
空间复杂度T(n)=O()
1.2、从分析角度划分(以时间复杂度为例)
从分析方面可分为:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度、均摊时间复杂度
1.2.1、最好情况时间复杂度
概念
在最理想的情况下,执行算法的时间复杂度
1.2.2、最坏情况时间复杂度
概念
在最糟糕的情况下,执行算法的时间复杂度
###1.2.3、平均情况时间复杂度
概念
在所有情况下,执行算法的时间总和的平均值
1.2.4、均摊时间复杂度
概念
大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上
举例
int a=0;
for(int i=0;i<n;i++){
a=a+1;
if(a == x){
break;
}
}
最好情况时间复杂度:循环第一次就能跳出循环,时间复杂度为O(1)
最坏情况时间复杂度:循环到最后一次才跳出循环,或者直到循环结束,时间复杂度为O(n)
平均情况时间复杂度:循环到中间某次就跳出循环,,T(n)=O(n)
均摊时间复杂度:本例用不到(不太常用就不计算了哈哈)
来源:CSDN
作者:爱猫的绅士
链接:https://blog.csdn.net/weixin_39841589/article/details/103805412