1.用常数1取代运行时间中的所有加法常数
2.在修改后的运行次数函数中,只保留最高阶项
3.如果最高阶项存在且不是1,则去除与这个项目相乘的常数
等差数列求和的两种算法的时间空间复杂度分析:
#include<stdio.h>
int main(){
int a1,n,d,sum=0;
scanf("%d %d %d",&a1,&n,&d);
for(int i=a1,j=0;j<n;j++,i+=d) {
sum+=i;
}
printf("%d",sum);
return 0;
}
时间复杂度:初始化两个变量,循环n次,每次进行三次加法,即2+3n,用大O表示为O(n)。
空间复杂度:定义了六个变量,即空间复杂度为6,用大O表示为O(1)。
#include<stdio.h>
int main(){
int a1,n,d,sum=0;
scanf("%d %d %d",&a1,&n,&d);
sum=(a1+a1+(n-1)*d)*n/2;
printf("%d",sum);
return 0;
}
时间复杂度:只进行了一次加减乘除运算,所以为O(1)。
空间复杂度:O(1)。
其他经典时间复杂度
1:O(n^2)
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%d %d",i,j);
}
}
2:O(logn)
for(int i=0;i<n;i*=2){
printf("%d",i);
}
3:O(mn)
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d %d",i,j);
}
}
4:O(m+n)
for(int i=0;i<n;i++){
printf("%d",i);
}
for(int j=0;j<m;j++){
printf("%d",j);
}