【问题标题】:Simplifying O(nm) and O(n + m) time complexity简化 O(nm) 和 O(n + m) 时间复杂度
【发布时间】:2017-06-16 16:19:43
【问题描述】:

如果我有一个以 O(nm) 时间复杂度运行的函数,将其简化为仅说它以 O(n^2) 时间复杂度运行是常见的做法/可以接受吗?比如这样的函数:

function funcOne(nArray, mArray) {
    for (var i = 0; i < nArray.length; i++) {
        for (var j = 0; j < mArray.length; j++) {

            ....

        }
    }
}

另外,如果我有一个以O(n + m) 时间复杂度运行的函数,是否可以将其简化为仅说它以O(n) 时间复杂度运行?例如这样的函数:

function funcOne(nArray, mArray) {
    for (var i = 0; i < nArray.length; i++) {

        ...

    }

    for (var j = 0; j < mArray.length; j++) {

        ...

    }
}

【问题讨论】:

  • 仅当nm 的渐近线性函数。
  • Big-O 有严格的数学定义,您不能随意更换变量。
  • 有时你会看到“in O(n²) where n = max(a, b)”或“n > m w.l.o.g”。但在大多数情况下,您会明确说明所有输入 O(mn) 的运行时复杂度。

标签: javascript algorithm runtime time-complexity big-o


【解决方案1】:

您提供的示例大约是 O(N) 复杂度,因为循环是按顺序执行的。如果您将一个循环放入另一个循环,则复杂度为 O(N^2)。 n和m呢?当然,如果 n 和 m 之间存在关系,那么通过 n 和 m 表达 N 可能是一件棘手的事情。为简单起见,您可以将 N 视为 n 和 m 的平均值,即 N = (n+m)/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多