你能帮我计算一下这个算法的时间复杂度吗?

时间:2015-04-06 12:58:21

标签: java algorithm big-o time-complexity complexity-theory

public static void complexityexample(int n) {
    int count = 0;
    int k = 1;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            count++;
        }
        k *= 2;
        for (int t = 0; t < n; t++) {
            count++;
        }
        System.out.println(count);
    }
}

有人能给我答案吗?

例如,我知道for循环中的nuber操作是2N + 2,

和count ++中的操作次数;是N

但是其他部分呢。

4 个答案:

答案 0 :(得分:9)

时间复杂度为O(2n)。瓶颈是:

for(int j = 0; j < k; j++){
  count++;
}

由于k i每次迭代都会呈指数增长。

i'次迭代中,k = 2i-1。这意味着将jk的所有值都迭代为O(k) = O(2i)

现在,对所有迭代进行总结:

20 + 21 + 22 + ... + 2n-1 = 2n - 1

最后一次平等来自sum of geometric series

请注意下一个内循环:

for (int t = 0; t < n; t++) {

不影响时间复杂度(就渐近符号而言),因为它为O(n)的每次迭代增加i时间,并且这会被第一个内循环的指数行为快速抑制

如果你想在最后计算count的值,它是第一个内部循环的总和,如上所述是(2n)-1,第二个内部循环是{{ 1}}。

答案 1 :(得分:0)

<强>(2 ^ N)+(N * N)

因为它们的主循环是

for (int i = 0; i < n; i++) {

2 ^ n来自:

for (int j = 0; j < k; j++) {
        count++;
    }

和n * n来自:

for (int t = 0; t < n; t++) {
        count++;
    }

答案 2 :(得分:0)

第1行)1次操作。

第2行)2次操作。

第3行)1 + n + 1 + n = 2N + 2。

4)2N + 2

5)N

7)N

9)2 N + 2

10)N

13)1

这是对的。

在所有数学计算之后,最终结果是:14N ^ 2 + 22N + 11 - 操作。

答案 3 :(得分:0)

使用Sigma表示法的精确方法是:

enter image description here

经验证实:

当n = 10时,整体迭代次数为1123次。

当n = 25时,整体迭代次数为33555056。

当n = 50时,执行必须花费(我必须将变量类型从int更改为long)。

实际上,这种非多项式算法很昂贵。