【问题标题】:Time complexity of two nested for loops两个嵌套 for 循环的时间复杂度
【发布时间】:2017-01-05 18:33:30
【问题描述】:
var a = [1,2,3,4,5 ...];    //length n
var b = [7,8,9,0,6 ...];    // length m
for(var i = 0; i < n; i++) {
    for (var j = 0; j < m; j++) {
        // time complexity
    }
}

在上面的代码中,n 的长度可以变化,但m 的长度是固定的,即数组a 的长度可以变化,而数组b 的长度保持不变。

上述代码的最坏情况下的时间复杂度会不会是O(n2)n == m? 或者 复杂度将为O(n*m),因为m 是恒定的,复杂度变为O(n)

【问题讨论】:

  • 如果m是一个常数,它会被摊销,这意味着复杂度是O(n)
  • @4castle 但在最坏的情况下,如果n 等于m,那么复杂度不应该是o(n2) 吗?
  • 为什么 n=m 是最坏的情况?如果 n 比 m 大得多,情况会更糟。
  • 时间复杂度表示随着 n 增加到无穷大,持续时间如何根据 n 演变。它没有说明 n 何时恰好等于某个常数。
  • c.f.基数排序,输入具有常数“w”位。复杂性有时被描述为 O(n),有时被描述为 O(wn)。这取决于您认为“常数”是什么。

标签: javascript algorithm time-complexity


【解决方案1】:

当您看到将变量变为大数时会发生什么,就会更容易理解。

在这种情况下,n 是一个变量,m 是固定的。由于它们嵌套在 for 循环中,我们得到 O(n*m) 的复杂度。

如果我们说 n = 5 和 m = 3(固定),那么我们在循环中得到 5*3=15 次迭代。

如果我们说 n = 10,000 和 m = 3(固定),那么我们得到 10,000*3 = 30,000 次迭代。

正如您在这里更清楚地看到的那样,唯一影响迭代并因此复杂性的是 n 值。所以回答你的问题,是的,因为 m 是固定的,所以复杂度是 O(n)。

【讨论】:

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