大 O 复杂度:T(n) = O(f(n)),G(n) = O(h(n))。是 T(G(n)) = O(h(f(n)))?

时间:2021-01-20 10:05:57

标签: performance time big-o

T(n)= O(f(n)), G(n)= O(h(n))

我将如何证明或反驳:

  T(G(n))= O(h(f(n))

我认为这是错误,因为它应该是 O(f(h(n))) 而不是 O(h(f(n))),因为 G 在 T 之前应用应用,我尝试用多项式函数代替 T 和 G,我认为顺序很重要,(n^2)!不等于 (n!)^2 ,但我不确定这个推理是否正确?

1 个答案:

答案 0 :(得分:0)

你是对的,这是错误的,但是我不太明白你的反例。
一个反例是取一个函数及其反函数,同时保持 h 渐近很小:

T(n) = 2^n , f(n) = 2^n 这符合 2^n = O(2^n)
还有
G(n) = lg(n!) , h(n) = n lg(n) 这也符合 lg(n!) < O(lg n^n) = O(n lg n)

然而,T(G(n)) = 2^(lg(n!)) = n!h(f(n)) = 2^n lg(2^n) = n*2^n 但是,n! =/= O(n*2^n) 因为我们有阶乘函数与指数函数(乘以线性函数),因此我们证明它不是真的。

>

原因 n! =/= O(n 2^n) 是因为:n*2^n < 2^n * 2^n = 4^n 并且我们知道阶乘函数“击败”指数。