c++ - 用 C++ 学习大 O 表示法,对这是 O(n) 还是 O(n2) 感到困惑

标签 c++ algorithm big-o

我正在使用 YouTube 和任何我能找到的东西学习编程。我偶然发现了一些 Big O 问题,我对其中一个问题感到很困惑。

for (int i = 0; i < n; i++)
    for (int j = 0; j < 2; j++)
        cout << i << " " << j << endl;

我的第一个想法是它是 O(n2) 因为有 2 个 for 循环。然后我仔细观察,发现内部 for 循环只从 0 到 2。

据我了解,Big O 会考虑最坏的情况。我的想法是,如果 n = 2 那么它会导致 O(n2) 但是所有其他情况都会导致 O(n) 这让我很困惑。

谁能解释一下为什么这是 O(n2) 或 O(n)?

最佳答案

它是O(n)。当一个函数 f(n)O(n) 时,它基本上意味着有一些常量 AB 这样对于每个 n(至少对于足够大的 n):

f(n) <= A * n + B

换句话说,常量(乘法和加法)不影响大 O 表示法。由于 2 是一个常量(它不依赖于 n),因此它不会反射(reflect)在大 O 表示法中。

在您的情况下,函数 f 是时间复杂度 - 即程序对大小为 n 的输入需要多少个恒定时间步。

关于c++ - 用 C++ 学习大 O 表示法,对这是 O(n) 还是 O(n2) 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279896/

相关文章:

c++ - std::ostream 作为可选 (!) 函数参数

regex - 根据模板生成所有字符串组合

php - 根据变量值回显文本

C++ 字符串错误

c++ - 如何在没有 sizeof 的情况下最好地防止自定义断言中出现未使用的变量警告?

algorithm - 坚持如何使这个回文对查找函数小于 O(N^2)

algorithm - 算法的运行时间?

algorithm - 随机选择具有频率的项目的高效算法

python - 在 C++ 和 Python 中使用蒙特卡罗方法计算看涨期权价格时价格差异显着?

c++ - 具有两次递归调用的算法的复杂性