【发布时间】:2016-11-03 22:41:02
【问题描述】:
考虑这三个循环
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) - 我如何分辨?
【问题讨论】:
-
三角数。
-
所以三角数迭代到 N*N = O(N) 和三角数迭代到 N = O(sqrt(N) ?
-
我真的需要说明吗?考虑第 n 个三角形数如何随着 n 的增加而增长。
-
第三个循环,N是多少? p有什么用?
标签: c algorithm loops time-complexity