algorithm - 算法的复杂度

标签 algorithm time-complexity

下面问题的复杂度是O(n)。不应该是 O(n^2)?那是因为外循环是O(n),内循环也是O(n),所以n*n = O(n^2)?

这道题的答卷上写着答案是O(n)。这怎么可能?

public static void q1d(int n) {
    int count = 0;
    for (int i = 0; i < n; i++) {
        count++;
        for (int j = 0; j < n; j++) {
            count++;
        }
    }
}

下面问题的复杂度是 O(n^2),你如何得到它?有人可以详细说明吗?

public static void q1E(int n) {
    int count = 0;
    for (int i = 0; i < n; i++) {
        count++;
        for (int j = 0; j < n/2; j++) {
            count++;
        }
    }
}

谢谢

最佳答案

第一个例子是O(n^2),看来他们犯了一个错误。要(非正式地)计算第二个示例,我们可以执行 n * (n/2) = (n^2)/2 = O(n^2)。如果这没有意义,您需要复习一下 O(n^k) 的含义。

关于algorithm - 算法的复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890078/

相关文章:

performance - 对这些时间复杂度进行排序

Java简单应用程序复杂性

c++ - C++ 中的递归选择不能完全工作

c++ - 如何对占用网格进行下采样?

java - BufferedImage 交换红色和蓝色 channel

python - 迭代字符串追加的时间复杂度实际上是 O(n^2) 还是 O(n)?

string - 递归删除所有相邻的重复项

c++ - 提高插入排序的运行时复杂度?

sql - 点周围的谷歌地图半径

ruby - 以文本/ASCII 形式呈现水平二叉树的算法