【问题标题】:n log n is O(n)?n log n 是 O(n)?
【发布时间】:2011-12-11 10:58:36
【问题描述】:

我正在尝试解决这个问题

T(n) = 3 T(n/2) + n lg n ..

我已经得出它属于大师定理情况2的解决方案,因为n lg n是O(n^2)

但在参考解决方案手册后,我注意到他们有这个解决方案

解决方案说 n lg n = O ( n ^(lg 3 - e)) 对于 e 在 0 和 0.58 之间

所以这意味着 n lg n 是 O(n) .. 对吗?我在这里错过了什么吗?

不是 nlgn O(n^2) 吗?

【问题讨论】:

    标签: algorithm recurrence


    【解决方案1】:

    nlg3 不是 O(n)。它超过了 O(n)...事实上,n 上大于 1 的任何指数都会导致比 O(n) 渐近更长的时间。由于 lg(3) 约为 1.58,只要从指数中减去小于 0.58,它就会渐近大于 O(n)。

    【讨论】:

    • 所以如果我理解正确,你和我一样认为解决方案手册是错误的,说 n lgn = O(n)
    • 不! n log n 更大,超出范围,并且不受 n 的限制。反之亦然。
    • f(n) = O(g(n)) if f(n) n0 .. 所以如果 n lg n = O(n) 会怎样c 和 n0 是 ?
    • 让 c = 1 和 n0 为 5,你会发现它不正确。反之亦然。
    • 所以如果反过来是 n = O(n lg n) 我理解但书上说 n lgn = O (n)
    【解决方案2】:

    n*log(n) 不是O(n^2)。它被称为准线性,它的增长速度比O(n^2) 慢得多。事实上n*log(n) 小于多项式。

    换句话说:

    O(n*log(n)) < O(n^k)
    

    在哪里k &gt; 1

    在你的例子中:

    3*T(2n) -> O(n^1.585)
    

    由于O(n^1.585) 是多项式并支配O(n*log(n)),因此后一项下降,因此最终复杂度仅为O(n^1.585)

    【讨论】:

    • 我认为后一个术语只有在加法时才会下降..所以 O(n + lg n) = O(n)
    • 在这种情况下它也会下降。但需要一个全面的例子/分析来说明原因。
    【解决方案3】:

    这将更好地解释事情

    【讨论】:

    • 感谢您的努力 .. 所以我猜 n lg n > O(n) .. 这本书是错的?
    • @WaelAwada 这本书的答案与 O(n log n) > O(n) 并不矛盾。
    • @WaelAwada 这本书的摘录看起来像是一种书面形式(如果不幸的是交换了第一个和第二个术语):我们有两个术语要考虑来说明简单的支配功能: n lg nn^logb a。由于 n lg nn 的 anything 大于一的幂 支配,因此它由 n^lg 3.
    • 你是从这里拿的那张图表吗? bigocheatsheet.com你应该相信你的来源!
    • 是Log2(100)~7
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多