java - 为什么 2 for 循环的时间复杂度不是 O(n*2^n)?

标签 java algorithm time-complexity big-o

此方法的时间复杂度为 O(2^n)根据我的教授。

我觉得这个方法的时间复杂度应该是O(n * 2^n)因为

外部 for 循环成本 O(n)
内部 for 循环成本 O(2^n)

public static int loop(int n) {
    int j = 1;
    for (int i = 0; i < n; i++) {
        for (int k = j; k > 0; k--) {
            System.out.println("Hello world");
        }
        j *= 2;
    }
    return j;
}

最佳答案

考虑一下:

对于 i = 0 :j = 1 -> 2^0
对于 i = 1 :j = 2 -> 2^1
对于 i = 2 :j = 4 -> 2^2
对于 i = 3 :j = 8 -> 2^3....

对于 i = n-1 :j = 2^n-1
如果您添加所有这些:

2^0 + 2^1 + 2^2 +.....+2^(n-1) => order of 2^(n) -> 2^(n) - 1 to be precise

所以时间复杂度是O(2^n)

关于java - 为什么 2 for 循环的时间复杂度不是 O(n*2^n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60565484/

相关文章:

java - 使用 Stream 从 String 消息中获取 ArrayList<String> 中的多个单词

java - 如何使用 Java 将 .tar 文件放入 .tar.gz 文件中?

algorithm - 7 张扑克牌手评估器

algorithm - 这是一棵完全二叉树吗?

java - 如何实现一个支持添加 O(1)、删除最大 O(logn) 的集合,反之亦然?

python - 乘法递归的时间复杂度

java - ExecutorService.invokeAll 和关闭

java - android – 在有限的时间内显示一个按钮

java - 查找大于给定数字且与给定整数具有相同二进制权重的最小 +ve 整数的算法

java - 短算法(递归)的试运行问题