【问题标题】:What is the time complexity of these nested for loops?这些嵌套 for 循环的时间复杂度是多少?
【发布时间】:2021-09-15 21:02:47
【问题描述】:

给定一些数字数组,即 [5,11,13,26,2,5,1,9,...]

这些循环的时间复杂度是多少?第一个循环是 O(n),但第二个循环是什么?它迭代数组中每个索引处指定的次数。

for (int i = 0; i < nums.size(); i++) {
    for (int j = 0; j < nums[i]; j++) {
        // ...
    }
}

【问题讨论】:

  • i &lt; nums[i] ?错字? -> j &lt; nums[i] ?如所写,内部循环将有 0 次或无限次迭代
  • 称它为O(NK) 其中K 是数组的平均值?
  • 当你使用 nums[i] 时,复杂性是不确定的,因为可能有一个像 [5,1000000,10000000,10000000,....] 这样的数组
  • 大 O 时间复杂度始终是一个角度问题。如果您将元素值的平均值视为一个常数或受某个常数(肯定是)的限制,那么总复杂度为O(nums.size)
  • @463035818_is_not_a_number 是的,这是一个错字,我更新了问题。谢谢。

标签: c++ time-complexity complexity-theory


【解决方案1】:

此循环的时间复杂度为O(N*M)(使用* 表示乘法)。

N 是您列表中的项目数,M 是您的数字的平均值或可能的最大值。两者都会产生相同的顺序,所以使用哪个更容易。

这是因为... 运行的次数与NM 成正比。它还假设... 是恒定的复杂性。如果不是,则需要乘以 ... 的复杂度。

【讨论】:

    【解决方案2】:

    O(sum(nums[i]) * nums.size())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多