这个任何AI工程师必须要深入理解的概念。对于每一个设计出来的算法都需要从这两个方面来分析O(N),O(N^2)
时间复杂度:在时间上要多久
空间复杂度:内存大小需要多少
int a = 0,b = 0;
for (i = 0;i < N; i++){ # O(N)+O(N) = O(N)
a = a + rand(); # 这里需要N*1个操作 = O(N)
b = b + rand(); # 这里需要N*1个操作 = O(N)
}
for (j = 0;j < N/2;j++){
b = b + rand(); #N/2 *1个操作 = 1/2 * O(N) = O(N)
}
有常数我不管
时间复杂度? O(N)
空间复杂度?就用了ab 2个单位的内存空间 = O(1) # constant space complexity
int a = 0;
for (i = 0;i < N; i++){
for (j=N;j >i;j--){
a = a + i + j;
}
}
i = 0: j=N...1 N
i = 1: j=N...2 N-1
i = 2: j=N...3 N-2
i=N-1: j=N 1
total = 1+2+3,...+N = N*(N+1)/2 = N*N/2 + N/2
=1/2*O(N^2) + 1/2*O(N) = O(N^2)+O(N) = O(N^2)
我们每当说算法X的效率要高于Y时指的是? 时间复杂度