【发布时间】:2013-11-09 22:33:50
【问题描述】:
O(n Log n) 是多项式时间吗?如果有,您能解释一下原因吗?
我对数学证明很感兴趣,但如果有任何强烈的直觉,我也将不胜感激。
谢谢!
【问题讨论】:
标签: big-o
O(n Log n) 是多项式时间吗?如果有,您能解释一下原因吗?
我对数学证明很感兴趣,但如果有任何强烈的直觉,我也将不胜感激。
谢谢!
【问题讨论】:
标签: big-o
是的,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怎么样? :)
n_0 不应该在那里。 2. 为了证明logn < 2n,我只证明logn < n < 2n。这变成h(n) = log(n)/n < 1。 n = n0 = 1 (0<1) 也是如此,您可以专注于证明 h(n) 是一个单调递减函数。
是的,因为它的上限是多项式 (n)。 您可以看一下图表并从那里开始,但除此之外我无法制定数学证明:P
编辑:来自维基百科页面,“如果算法的运行时间是算法输入大小的多项式表达式的上限,则称该算法具有多项式时间”。
【讨论】:
至少不比多项式时间差。仍然不是更好:n
【讨论】:
是的。当 n 趋于无穷时,nlogn 的极限是多少?直观上,对于较大的 n,n >> logn 并且您可以考虑以 n 为主的乘积,因此 nlogn ~ n,这显然是多项式时间。更严格的证明是使用 Inspired 所做的 Sandwich 定理:
n^1
因此,nlogn 以多项式时间的序列为界。
【讨论】:
log(n)=o(n), 所以log(n)=O(1)”。我同意忽略对数是直观地开始了解nlog(n) 如何增长的好方法,但我们不能完全忽略它。换一种方式说明我的观点:如果我们将log 更改为sqrt,您仍然有n>>sqrt(n),但n^1.5 不会像n 那样增长。