时间复杂度
算法效率
算法效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称为空间复杂度。时间复杂度主要衡量一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间。在计算机发展早期,计算机的存储容量很小,所以对空间复杂度很在乎。经过迅速发展,计算机的存储容量已经很大了,所以现在更关注时间复杂度一点。
时间复杂度
时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。
计算时间复杂度时不需要精确计算,只需要大概了解就可以所以用大O的渐进表示法来计算时间复杂度。
例:
void func1(int N){
int count = 0;//1
//两个for循环嵌套,所以是n的平方
for(int i = 0;i < N;i++){//n
for(int j = 0;j < N;j++){//n
count++
}
}
for(int k = 0;k < N;k++){//n
count++
}
int M = 10;//1
while((M--) > 0){//10
count++;
}
System.out.println(count);//1
}
在上述方法中,时间复杂度 F(N) = 1+N2+N+1+10+1;
推导大O阶方法:
1.常数都用1取代。F(N) = 1+N2+N+1+1+1;
2.修改后的时间复杂度的运行次数函数公式最高阶项。F(N)=N2;
3.如果最高阶项存在且不是常数1,那么它的系数修改为1.
到此,funci1()方法的时间复杂度为:O(N2)。
大O符号:用于描述函数渐进行为的数学符号。
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量。空间复杂度不是计算程序运行占用了多少byte的空间,因为这是没有意义的,所以空间复杂度是计算变量的个数。他和时间复杂度的规则基本类似,所以也用大O渐进表示法。