【问题标题】:Is O(n Log n) in polynomial time?O(n Log n) 是多项式时间吗?
【发布时间】:2013-11-09 22:33:50
【问题描述】:

O(n Log n) 是多项式时间吗?如果有,您能解释一下原因吗?

我对数学证明很感兴趣,但如果有任何强烈的直觉,我也将不胜感激。

谢谢!

【问题讨论】:

    标签: big-o


    【解决方案1】:

    是的,O(nlogn) 是多项式时间。

    来自http://mathworld.wolfram.com/PolynomialTime.html

    一个算法被称为在多项式时间内是可解的,如果 完成给定输入的算法所需的步骤是 O(n^m) 对于某个非负整数 m,其中 n 是 输入。

    来自http://en.wikipedia.org/wiki/Big_O_notation

    f 是 O(g) iff

    我现在将证明对于某些 m,n log n 是 O(n^m),这意味着 n log n 是多项式时间。

    确实,取 m=2。 (这意味着我将证明 n log n 是 O(n^2))

    为证明,取 k=2。 (这可能更小,但不是必须的。) 存在一个 n_0 使得对于所有较大的 n 以下成立。

    n_0 * f(n)

    取 n_0 = 1(这就足够了) 现在很容易看到

    n log n

    log n

    n > 0(假设)

    如果您对此不确定,请点击here

    这个证明在乳胶数学模式下可能会更好,但我认为 stackoverflow 不支持。

    【讨论】:

    • 证明log n <= 2n怎么样? :)
    • 1. n_0 不应该在那里。 2. 为了证明logn < 2n,我只证明logn < n < 2n。这变成h(n) = log(n)/n < 1n = n0 = 1 (0<1) 也是如此,您可以专注于证明 h(n) 是一个单调递减函数
    【解决方案2】:

    是的,因为它的上限是多项式 (n)。 您可以看一下图表并从那里开始,但除此之外我无法制定数学证明:P

    编辑:来自维基百科页面,“如果算法的运行时间是算法输入大小的多项式表达式的上限,则称该算法具有多项式时间”。

    【讨论】:

      【解决方案3】:

      至少不比多项式时间差。仍然不是更好:n

      【讨论】:

      【解决方案4】:

      是的。当 n 趋于无穷时,nlogn 的极限是多少?直观上,对于较大的 n,n >> logn 并且您可以考虑以 n 为主的乘积,因此 nlogn ~ n,这显然是多项式时间。更严格的证明是使用 Inspired 所做的 Sandwich 定理:

      n^1

      因此,nlogn 以多项式时间的序列为界。

      【讨论】:

      • 我没有说它是 1,如果我们是迂腐的,我们可以说当 n 趋于无穷大时,n 支配了 nlogn 的极限。严格来说,趋于无穷大的序列发散。如果你有两个函数 f(n)*g(n),那么如果乘积是 lim f(n) * lim g(n) 的极限,在这种情况下是无穷大*无穷大,这是未定义的。
      • “当 n 趋于无穷时,nlogn 的极限”是“n,即 n^1”。那你能再解释一下这个说法吗?
      • 我已经这样做了。重复一遍:当 n 趋于无穷时,n >> logn。因此,您基本上可以忽略 logn 对 nlogn 的贡献,因为 n 趋于无穷大,只剩下 n。这不是“严谨”,而是那家伙要求直觉……
      • 但你实际上是在说“log(n)=o(n), 所以log(n)=O(1)”。我同意忽略对数是直观地开始了解nlog(n) 如何增长的好方法,但我们不能完全忽略它。换一种方式说明我的观点:如果我们将log 更改为sqrt,您仍然有n>>sqrt(n),但n^1.5 不会像n 那样增长。
      猜你喜欢
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2011-07-09
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多