基本时间复杂度?

时间:2016-11-03 22:41:03

标签: c algorithm loops time-complexity

考虑这三个循环

O(N ^ 2)

int i = 0, s = 0;
while (2*i <= N*N) {
s+=i;
i++;
}

O(N)

int i = 0, s = 0;
while (s <= N*N) {
s+=i;
i++;
}

O(SQRT(N))

int i = 0, s=0, p=1;
while (s < N) {
i++;
p = p*i;
s += i;
}

第一个的时间复杂度是O(N ^ 2),但第二个是O(N)(对我来说,似乎N ^ 2会更合适)。怎么会?另外,为什么循环三个sqrt(N)而不是log(N) - 我怎么能区分它?

1 个答案:

答案 0 :(得分:3)

第二个: 假设迭代将为k,然后循环将重复:

1+2+3+...k <= N^2 --> k*(k-1)/2 <= N^2 --> k^2 <= N^2 --> k is O(N).

第三个: 假设迭代将为k,然后循环将重复:

1+2+3...+k <= N -->...--> k^2 <= N --> k is O( sqrt(N) ).