【问题标题】:Complexity of java code with nested for loops带有嵌套 for 循环的 java 代码的复杂性
【发布时间】:2020-12-02 12:08:47
【问题描述】:

我正在尝试分析下面的这段代码。我希望计算复杂性和操作/迭代的数量(这会导致复杂性)。我的猜测是复杂度是 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;
      }
   }
}

【问题讨论】:

    标签: java time-complexity


    【解决方案1】:

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

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

    内循环的总迭代次数为

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        相关资源
        最近更新 更多