2021/9/12 算法的时间复杂度与空间复杂度
一般可以从一个算法的时间复杂度与空间复杂度来评价算法的优劣。
时间复杂度:时间增长的趋势
? 通俗来讲就是计算机运行一个算法时,程序代码被执行的总次数
空间复杂度:内存空间增长的趋势
T(n) 表示时间。
常见的渐进时间复杂度有:
style="zoom:25%;"
时间复杂度计算
1 O(1)
复杂度为常数,不会随着变量的改变而改变
int x = 0;
int y = 1;
int temp = x;
x = y;
y = temp;
2 O(n)
for(int i =0;i<n;i++){
xxx
}
3 O(logN)
int i = 1;
while (i<n){
i = i * 2;
}
// 2^k = n
// k = logN
4 O(n logN)
for(int j =0;j<n;j++){
int i = 1;
while (i<n){
i = i * 2;
}
}
// 在n层循环中套了一层logN
5O(n^2) n平方
for (int i=1;i<n;i++){
for (int j = 1;j<n;j++{
xxx;
}
}
6 O(nm)
for (int i=1;i<n;i++){
for (int j = 1;j<m;j++{
xxx;
}
}
空间复杂度计算
用S(n) 表式
S(n) = O(f(n))
1 O(1)
int x = 0;
int y = 0;
x++;
y++;
// x,y无论怎么赋值,在内存分配上总是4个字节
2 O(n)
int []array = new int[n];
for (int i=0;i<n;i++){
array[i] = i;
}
// 取决于array的长度,即n的大小
3 O(n^2)
二维数组,矩阵相加。