繁体   English   中英

带有嵌套 for 循环的 java 代码的复杂性

[英]Complexity of java code with nested for loops

我正在尝试分析下面的这段代码。 我希望计算复杂性和操作/迭代次数(这会导致复杂性)。 我的猜测是复杂度为 O(n^2),因为我嵌套了 for 循环。 但是,在内循环中,值正在切换,替换位置。 这个操作不会使算法重复多次,因此它超过 O(n^2),还是只有 while 循环才有可能? 我如何找到完成的迭代/操作的确切数量?

for (int i = 0; i < b.Length; i++)
{
   for (int j = i + 1; j < b.Length; j++)
   {
       if (b[i] > b[j])
      {
            t = b[i];
            b[i] = b[j];
            b[j] = t;
      }
   }
}

外循环有b.length迭代。 让我们称之为n

内部循环有n - i - 1次迭代。

内循环的总迭代次数为

(n - 1) + (n - 2) + ... + 1 = n * (n -1) / 2 = O(n^2).

内部循环的每次迭代都会持续工作——最多 1 个条件 + 3 个赋值——因此总运行时间为O(n^2)

确切的操作次数取决于输入,因为输入决定了条件为真的次数。

循环次数由常量b.length和索引变量 i 和 j 控制。 只要您不在循环内干预 i 和 j,复杂性就保持不变。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM