算法的时间复杂度大O记法
今天初步学习了算法的时间复杂度的详解以及大O记法,主要记录一下如何用大O记法表示算法的时间复杂度。
下面是求1-100和三种算法
第一种算法
public static void main(String[] args){
int sum=0;
int n=100;
sum=(n+1)*n/2;
System.out.println("sum="+sum);
}
第二种算法
public static void main(String[] args){
int sum=0;
int n=100;
for(int i=1;i<=n;i++){
sum=sum+i;
System.out.println("sum="+sum);
}
第三种算法
public static void main(String[] args){
int sum=0;
int n=100;
for(int i - 1;i <=n ; i++){
for(int j - 1; j <=n;j++){
sum++i;
}
}
System.out.println("sum="+sum);
}
先来简单分析一下这三段代码,如果忽略执行次数和输出语句的执行次数,那么当输入规模为n时,以上算法执行的次数分别为:
算法一: 3次
算法二: n+3次
算法三: n^2+2次
那么 重点来了,如何使用大O记法来表示算法的时间复杂度呢?
1. 用常数1取代运行时间中的所有加法常数;
2. 在修改后的运行次数中.只保留高阶项;
3. 如果最高阶项存在,且常数因子不为1,则除去与这个项相乘的常数;
所以就可以得到上面三种算法的时间复杂度: