algorithm - for循环的计算复杂度-自相矛盾

标签 algorithm complexity-theory big-o asymptotic-complexity

通过分析一个程序的运行时间,我有一个矛盾。例如,考虑以下代码:

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

这里,第一个 for 循环的计算复杂度是 O(n2),第二个循环是 O(n)。但是,第二个循环执行了 n2 次,而第一个循环执行了 n 次。例如,如果我们将 cout 语句放在内部循环中,它会输出 n2 次,但是如果我们将 cout 语句放在第一个循环内部但内部循环之外的某处,它会输出 n 次。那为什么我们说内层循环的复杂度是O(n),而外层循环的复杂度是O(n2)。我们说外层循环的复杂度是O(n< sup>2) 但它执行了 n 次,为什么会这样? 我做错了什么吗?谢谢。

最佳答案

内层循环执行n次,耗时O(n)。外循环执行内循环 n 次,但您必须考虑这 n 次外循环执行中每一次的内循环成本。这使得 O(n * O(n)) = O(n^2)。

关于algorithm - for循环的计算复杂度-自相矛盾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15086161/

相关文章:

algorithm - 数组去除重复元素

algorithm - 不能满足所有需求的最小成本的最大流量

algorithm - 这个递归算法的大O

algorithm - 对《算法导论》一书中的 "c lg n"感到困惑 - 什么是 c?

big-o - 什么是大 O 符号?你是如何想出像 O(n) 这样的数字的?

big-o - 如何表明一种语言属于 P 类?

arrays - 最小递增/递减操作,使所有长度为 k 的子数组之和相等

java - 有没有更快的算法来构造这个图的邻接表?

java - 回文算法的时空复杂度

algorithm - 比 O(n log n) 更快的通用且实用的排序算法?