【问题标题】:How to calculate Time Complexity in nested for loop? [duplicate]如何计算嵌套for循环中的时间复杂度? [复制]
【发布时间】:2017-05-22 09:27:31
【问题描述】:

下面sn-p的时间复杂度是多少?你能解释一下吗?

for(int i=0;i<n;i++){
  for(int j=0;j<=i;j++){
    //print something
  }
}

【问题讨论】:

  • 时间复杂度O(n^2)
  • 复杂度应该是N^2/2
  • 你能解释一下吗?

标签: java algorithm performance time-complexity


【解决方案1】:

外部循环有n 迭代。

对于外循环的每次迭代,内循环都有i+1 迭代。

因此内循环的总迭代次数为:

1 + 2 + 3 + ... + n

等于

n*(n+1)
-------
   2

这是O(n^2)

【讨论】:

    【解决方案2】:

    每当您遇到计算时间复杂度的问题时,只需看看您要完成这项工作的次数。

    在这里,在您的问题中,无论您在做什么工作,比如说打印一些东西,您都要做外循环的次数,它本身运行 n 长度。 因此,您将完成 1+2+3+....n 次的工作 变成 n*(n+1)/2 次。

    因此,它只是 O(n^2)

    【讨论】:

      【解决方案3】:
      1. 对于 i=0,内循环运行 1 次
      2. 对于 i=1,内循环运行 2 次​​li>
      3. 对于 i=2,内循环运行 3 次 ...

      n-1。对于i=n-1,内循环运行n次

      所以,总时间 = 1 + 2 + 3 +....+ n

      n*(n+1)/2

      并表示为 O(n^2)

      【讨论】:

        【解决方案4】:

        时间复杂度是 n 平方的大 O,即O(n^2)

        1. 外圈是n

        2. 内循环成本为1 + 2 + 3,...n-2, n-1, n

        所以总成本是O(n^2)

        【讨论】:

          【解决方案5】:

          二次函数(二次运行时间)

          如果,则称算法是二次的

          二次函数出现的主要原因是嵌套循环,其中内部循环执行线性数量的操作n,而外部循环也执行线性数量的操作n,因此,在这种情况下,整个算法执行 操作。

          n 是任何给定数组中的元素数。

          如果数组中的元素数为 10,这意味着需要 10 * 10 = 100 次操作才能完成逻辑的执行。

          一个很好的例子是检查列表中有多少单个项,这需要将列表中的每个元素与列表中的所有元素(包括它自己)进行比较。

          二次函数图:

          我有一个旧的 BigO 符号注释,涵盖了 7 个最著名的运行时复杂性,看看这是否会有所帮助 BigO

          【讨论】:

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