时间复杂度:算法的基本操作执行的次数和问题的规模n之间的函数关系
(省略规则:1.只保留最高项 2.不要系数)
空间复杂度:算法的额外辅助空间和问题规模之间的函数关系省略规则:
(1.只保留最高项 2.不要系数)
O(1):算法的执行次数和问题规模之间没有任何关系
O(n):算法的执行次数和问题规模之间有关系,并且一般步进表达式以++或者--来跑
O(n^2):算法的执行次数和问题规模之间有关系,一般出现在双层循环(j和i有关系,也是n^2)
O(logn):算法的执行次数和问题规模之间有关系,并且一般步进表达式以*2和/2来跑
//以空间换取时间
我们以时间复杂度和空间复杂度举一个例子来看,帮助我们理解
代码1:(这是一个计算学生年龄的题目,在递归函数里已经详细讲过这里就不再赘述)
(C语言递归函数(一)_hi332516_1的博客-CSDN博客)
分析时间复杂度:
如果输入的人数为 n 个人,子函数中临时变量 i 是小于n 的并且步进为1 ,那么我们的代码就要执行 n 次,再看for 循环中有一个语句,他也是执行了n 次,所以时间复杂度为应为O(2n),但是我们知道时间复杂度只需保留最高项,并且省略系数,所以该代码的时间复杂度应该为O(n)。
分析空间复杂度:
在该程序中用到的临时变量是 tmp 和 i,所以空间复杂度为O(2),再根据空间复杂度也只需保留最高项,并且省略系数,所以该代码的空间复杂度应该为O(1)。
#include<stdio.h>
int Age1(int n)
{
int tmp = 10;
for (int i = 1; i < n; i++)
{
tmp += 2;
}
return tmp;
}
int main()
{
for (int i = 1; i <= 5; i++)
{
printf("%d\n", Age1(i));
}
return 0;
}