【问题标题】:Basic time complexity?基本时间复杂度?
【发布时间】: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


【解决方案1】:

第二个: 假设迭代将是 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) ).

【讨论】:

    猜你喜欢
    • 2014-10-29
    • 2016-02-13
    • 2012-08-14
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    相关资源
    最近更新 更多