【问题标题】:Time complexity of Special Double For-Loop?特殊双 For-Loop 的时间复杂度?
【发布时间】:2015-10-01 00:41:02
【问题描述】:

所以我只是在考试中被问到这个问题,这让我发疯了。问题是这样的: 以下代码的时间复杂度以 n 表示:

int count = 0;
for(int i = 0; i < n; i++) {
    for(int j = 1; j < n; j = j * 2) {
        count++;
    }
}

a) O(n log(n))

b) O(n^2)

我坚信答案是n(log(n)),因为内循环只运行k次,其中k^2

【问题讨论】:

  • 你搞错了。 k^2 != n,而不是 2^k = n nlogn 对我来说看起来很准确。话虽如此,它非常容易测试。运行此代码并在末尾打印count 并带有一些测试值。

标签: algorithm big-o time-complexity


【解决方案1】:

您的推理是正确的,下面将答案作为O(n log n) 进行了细微修改。答案不可能是O(n^2)

2^k = n所以k = log n

内部循环将运行:log n times
外循环将运行:n

所以这是O(n log n) 时间复杂度

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多