O(n Log n)是多项式时间吗?如果是这样,你能解释一下原因吗?
我对数学证明感兴趣,但我也很感激任何强烈的直觉。
谢谢!
答案 0 :(得分:11)
是的,O(nlogn)是多项式时间。
来自http://mathworld.wolfram.com/PolynomialTime.html:
如果数字,则算法在多项式时间内是可解的 完成给定输入的算法所需的步骤是 对于某些非负整数m,O(n ^ m),其中n是复数 输入。
来自http://en.wikipedia.org/wiki/Big_O_notation:
f是O(g)iff
我现在将证明n log n对于某些m是O(n ^ m),这意味着n log n是多项式时间。
确实,取m = 2。 (这意味着我将证明n log n是O(n ^ 2))
对于证明,取k = 2。 (这可能更小,但不一定。) 存在n_0,使得对于所有较大的n,以下成立。
n_0 * f(n)< = g(n)* k
取n_0 = 1(这就足够了) 现在很容易看出
n log n< = 2n * n
log n< = 2n
n> 0(假设)
如果您对此不确定,请点击here。
这个证明在乳胶数学模式下可能会好很多,但我认为stackoverflow不支持。
答案 1 :(得分:3)
因为它是多项式(n)的上限。 你可以看看图表并从那里开始,但我不能制定一个除此之外的数学证明:P
编辑:在维基百科页面中,“如果算法的运行时间在算法输入大小的多项式表达式的上限,则称算法是多项式时间。”
答案 2 :(得分:2)
至少不比多项式时间差。并且仍然不是更好:n< n log n< N * N
答案 3 :(得分:-1)
是。当n进入无穷大时,nlogn的极限是什么?直观地,对于大的n,n>> logn,你可以考虑n和nlogn~n主导的产品,这显然是多项式时间。更严格的证据是使用Inspired所做的三明治定理:
n ^ 1< nlogn< N ^ 2。
因此nlogn被多项式时间的序列限制在上面(和下面)。