我有这个算法(为方便起见,在c
代码中):
int algo(int *T, int size)
{
int n = 0;
for (int i = 1; i < size; i++) {
for (int j = i; j < size; j++) {
n += (T[i] * T[j]);
}
}
return n;
}
这个算法的时间复杂度是多少?
我的赌注是n * log (n)
,因为我们在size
长度上有两次叠加迭代,第二次在size - i
,但我不确定。
欢迎复杂的正式证明!
答案 0 :(得分:3)
这是一个O(N 2 )算法。
总次数是(N)+(N-1)+(N-2)+ ... + 1,即sum of arithmetic progression。计算和的公式是N *(N-1)/ 2,即O(N 2 )。