多项式时间复杂度中的负系数

时间:2012-02-11 20:14:44

标签: complexity-theory

假设某些算法具有多项式时间复杂度 T(n),那么任何一个项都可能具有负系数吗?直观地说,答案似乎是一个明显的“否”,因为任何算法都没有减少先前步骤所占用的时间,但我想确定。

2 个答案:

答案 0 :(得分:3)

在谈论多项式复杂性时,只有具有最高度数的系数才算数。

但我认为你可以有T(n)= n * n - n = n *(n-1)。 n-1代表你在第一次或最后一次迭代时不做的事情。

无论如何,复杂性仍然是n * n。

答案 1 :(得分:2)

算法可能在其时间复杂度上具有负系数,但总体而言算法将具有一些正时间复杂度。作为维基百科的example,请使用函数f(x)=6x^4-2x^3+5。他们解决O(x^4)的复杂性如下:

  

     

对于某些合适的x0和M选择以及对于所有x> X0。为了证明这一点,设x0 = 1且M = 13.然后,对于所有x> 1。 X0:

     

     

所以,

     

也就是说,即使在原始等式中存在负系数,仍然存在基于具有最高幂次序的项的一些正的总时间复杂度。


下限怎么样?根据定义,我们可以使用以下definition找到任何函数的下界:当n进入无穷大,然后对于某些常数k和某些n0我们有以下适用于所有n>n0

  

让我们猜测上面的函数f(x)也是Omega(x ^ 4)。这意味着:

  

6x ^ 4 - 2x ^ 3 + 5> = kx ^ 4

解决k:

  

k< =(6x ^ 4 - 2x ^ 3 + 5)/(x ^ 4)

     

k <= 6 - 2x ^ -1 + 5x ^ -4

术语(2 / x)接近0,(5 / x ^ 4)也是如此,因此我们可以为某些大的x0 = 30选择k=2。为了证明这一点,我们展示了:

  

6x ^ 4 - 2x ^ 3 + 5> = 2x ^ 4其中x> 1。 30

     

4x ^ 4 - 2x ^ 3 + 5> = 0

哪个成立。所以f(x)是Omega(x ^ 4),我们也可以得出结论,我们找到了一个紧密的界限,f(x)是Theta(x ^ 4)。

为什么这会起作用,即使系数是负数?对于Big O和Big Omega表示法,我们正在寻找一个界限,使得在某个点之后一个函数支配另一个函数。也就是说,as these graphs illustrate

  

http://cs.anu.edu.au/~Alistair.Rendell/Teaching/apac_comp3600/module1/images/Introduction_BigOGraph.png - Big O

     

http://cs.anu.edu.au/~Alistair.Rendell/Teaching/apac_comp3600/module1/images/Introduction_BigOmegaGraph.png - Big Omega

考虑到我们的原始f(x),6x^42x^4(我们的kg(x)函数)增长得更快。在某些点之后,6x^4字词将超过2x^4的增长,使其始终大于2x^4。从图形上看,这两个函数看起来像这样:

http://www3.wolframalpha.com/Calculate/MSP/MSP8991a0763a90cg9c64500002i49d6b33c5684hg?MSPStoreType=image/gif&s=47&w=319&h=132&cdf=RangeControl

尽管系数为负,但显然kg(x)f(x)的下限。


现在,对于具有任何负系数的任何多项式函数,这总是如此 - 具有任何系数的函数f(x)将受其最高次多项式的约束吗?不可以。如果具有最高度的项具有负系数,则边界不完全相同。拿f(x) = -2x^2。我们可以显示f(x) = O(x^2)

  

-2x ^ 2&lt; = cx ^ 2   -2&lt; = c

任何c>0都可以满足(因为c定义为正常数)。但是,如果我们尝试对下限做同样的事情:

  

-2x ^ 2&gt; = cx ^ 2   -2&lt; = c

然后我们找不到合适的c因为c必须是非负的。