如何证明以下函数h.g(n)= O(f(n))

时间:2016-03-23 02:20:54

标签: algorithm asymptotic-complexity

鉴于此,

  

设f(n)= O(g(n)),设g(n)= O(h(n)),f(n),g(n)和h(n)的函数可以是)使以下真正的hg(n)= O(f(n))。

我尝试过所有可能的解决方案。例如,令f(n)= g(n)= h(n)= n。

所以f(n)是g(n)的大O是真的,而g(n)是h(n)的大O,但是h.g = O(f(n))当然是假的。因为我要得到n ^ 2,如果它是Ω  符号而不是大O,这很容易证明。

我尝试了不同的函数多项式,日志,指数函数它们都没有工作。

1 个答案:

答案 0 :(得分:1)

假设h(x)OMEGA(x),这意味着必须存在一些常数正值x', a,b,c,d,以便对于任何x>x',以下成立: f(x) <= a*g(x), g(x) <= b*h(x)d*f(x) >= h(g(x)) >= c*g(x) >= c*a*f(x),这意味着实际上gf渐近等价且两者都是o(x),但h(x)实际上是{{} 1}}(否则矛盾) - 这导致一组解决方案

现在假设Theta(x)h(x),这意味着所有o(x)实际上都是f,g,h。这意味着我们可以从o(x)中挑选任何h(x),然后挑选任何[O(1):o(x)],以便g(x)g(x),然后挑选任何[O(1):o(h)]f[OMEGA[h(g(x)), o(g(x))]而必须存在的h范围。这些导致第二组解决方案(无限数,基于o(x)的选择)

注意:假设所有功能都在增加且至少为o(1)

  

忽视以下 - 错误地理解了问题

这不回答问题,但可能有所帮助

显然,所有三个函数h(x)都是f,g,h。很容易理解为什么: 必须存在一些常数正值O(1),以便对于任何x', a,b,c,以下成立: x>x',所以

  

c * f(x)> = h(x)* g(x)> = a * b * f(x)* f(x),或f(x)=&lt; C /(B * A)

因此我们可以得出结论f(x) <= a*g(x), g(x) <= b*h(x), h(x)*g(x) <= c*f(x)实际上是f(x) 此外,

  &lt; c&gt; = c * f(x)&gt; = h(x)* g(x)&gt; = g(x)* g(x)* b

所以O(1)也是g(x)

最后

  

c * f(x)> = h(x)* g(x)> = h(x)* f(x)* a或h(x)<= c / a

所有三个功能都是O(1)。一个例子是O(1)