【问题标题】:Why is the time complexity of n^2 logn + n(logn)^2 = O(n^2(logn)^2)?为什么n^2 logn + n(logn)^2 = O(n^2(logn)^2)的时间复杂度?
【发布时间】:2020-07-05 13:59:58
【问题描述】:

为什么复杂度是 n^2 logn + n(logn)^2 = O(n^2 (logn)^2) ? 我认为这是康奈尔期末考试试卷(在线找到)的解决方案,但我不太确定它是否正确。

【问题讨论】:

  • 不是:O(n² log n + n log² n) = O(n² log n)
  • edit您的问题,用您自己的话包括您对为什么应该是时间复杂度以及更重要的是为什么不应该的想法。
  • 这对我来说是个好问题。这是一个技巧问题,但恕我直言,这是一个有趣的问题。这不是一个错误,它是故意测试人们是否理解上限原理的。
  • @norok2 你是对的,因为问题不够精确,O(n^k) 确实是一个有效的答案。另一方面,这不是最好的答案(人们应该知道它不是)。所以这取决于老师是否喜欢笑话:p。但也许更正是错误的,并且下限/上限都是预期的,在这种情况下,所有答案都只是部分正确,因为它们只给出了上限。最好的答案是给出两个界限并在它们相同时将它们写为Θ(…)。这里的问题是存在隐含的学生/教师约定。

标签: time-complexity big-o


【解决方案1】:

语句 n² log n + n (log n)² ∈ O(n² (log n)²) 是有效的。这不是这个函数可以给出的最好的上限。但这仍然是真的。请注意,f(n) ∈ O(n² log n) ⇒ f(n) ∈ O(n² (log n)²)。这就是为什么人们从不(或不应该)写成 f(n) = O(g(n)),而应该写成 f(n) ∈ O(g(n))。

另一方面,提供的界限有点​​保守,很可能是因为对于较小的 n (n

根据上下文假设更保守的界限可能是有意义的(如果 n 非常小并且 1 可能已经被认为是“大值”),但通常如果是这种情况,它会被明确指定。

如果没有其他规定,人们会假设这个函数的最佳上限是 O(n² log n)。

【讨论】:

    【解决方案2】:

    让我们考虑Wikipedia中解释的理论。

    上面写着如果 f1O(g1) 并且 f2O(g2) , f1 + f2O(max(g1, g2)).

    让我们考虑 f1 = n² log nf2 = n log² n。 那么 f1O(n² log n) 并且 f2O(n log² n)

    现在,对于 n > 1,由于 n > log n,我们可以将不等式两边同时乘以 n log n 得到获得 n² log n > n log² n。这证明 O(n² log n) > O(n log² n) 并且根据上面的定义,我们有:O(n² log n)

    【讨论】:

    • 小心,log(n) 并不总是积极的,所以证明比这更“难”(你必须指定 n > 1)
    • @cglacet 吹毛求疵地正确。没人在乎,因为无论如何我们都在取 n -> ∞ 的极限。 n 是计算复杂度计算的正整数。所以这几乎可以减少到一个不严格的值。
    • 证明仍然不正确,n > log n 总是正确的,当你将不等式的两边都乘以 log n(并不总是正数)时,就会出现问题。写“n log² n ∈ O(n² log n)”也可能比“O(n² log n) > O(n log² n)”更正确/标准。但老实说,如果你必须证明这一点,我认为说明“n² log n > n (log n)² for n > 1”就绰绰有余了。
    • for n > 1, log n > 0。因此我不明白为什么乘法会成为问题。
    • 对于 n > 1 没有“问题”,但一般来说,“n² log n > n log² n”语句是无效的。换句话说,它不是“n > log n (for n > 1)”而是“n² log n > n log² n (for n > 1)”。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2012-08-20
    • 2012-05-27
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多