比较n ^ a * log(n)^ b和n ^ c * log(n)^ d的运行时复杂度

时间:2018-06-02 17:53:21

标签: algorithm asymptotic-complexity

我正在研究一个问题,我给出了f(n)= n ^ 2 *(log(n))^ - 1和g(n)= n(log(n))^ 2,以及要求确定f = O(g),f =ω(g)或两者(f = theta(g))。

这个问题可以推广到(n ^ a)* log(n)^ b和(n ^ c)* log(n)^ d

我理解任何多项式都支配任何对数,例如n支配log(n),而n ^ 2支配nlog(n)但是我不确定如何使其适应更复杂的问题,例如:

  • f =(n ^ 2)* log(n)^ - 1000,g =(n)* log(n)^ 1000

或更好:

  • f = n ^ .01,g = log(n)^ 10

多项式项是否总是决定f是否支配g,反之亦然?如果是这样,为什么?如果没有,问题怎么解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

答案:n^a * log(n)^b如果n^c * log(n)^d支配a > c。换句话说,您只需要查看多项式部分。 (当然除非a=c,在这种情况下,你要查看polylog部分。)

这是因为多对数函数总是渐近地小于多项式函数。更确切地说,如果p(n) = a*(log n)^bpn中是多对数的),则p(n) = o(n^epsilon)为任何epsilon > 0(请参阅this Wikipedia page获取正式声明,和this answer证明)。

因此,对于任何n^a * log(n)^b = o(n^(a + epsilon)),我们都有epsilon > 0。从中可以很容易地得出上面的答案。