证明函数的加法和减法的大O.

时间:2013-09-11 08:59:41

标签: algorithm big-o proof

假设f(n) = O(s(n))g(n) = O(r(n))。证明或反驳(通过举一个反例)以下声明:

  1. f(n)-g(n)= O(s(n)-r(n))
  2. 如果f(n)= O(g(n)),那么f(n)+ g(n)= O(s(n))
  3. 我真的不知道从哪里开始......请向一名年轻学生伸出援助之手。请给出解释而不仅仅是解决方案。非常感谢你。

1 个答案:

答案 0 :(得分:3)

正式定义:f(n)=O(s(n))当且仅当存在两个常量M>0N>0,例如for all n>N , |f(n)|<M|g(n)|。 (存在等效定义,例如 adi 给出的定义,您可以在维基百科中找到更多内容)

这两个常数不是唯一的,但是它们不能依赖于变量n,如果它们不再存在,那么你就不会有任何常数。

我强烈建议您自己计算和操纵这些定义。只有阅读答案不足以应对涉及此处所述概念的未来问题

a) false : 反例:

f(n)=ns(n)=ng(n)=1r(n)=n

我们有: f(n)=O(s(n))(N = 1,M = 1完成定义的工作)和g(n)=O(r(n))(相同,N = 1,M = 1)

让我们假设f(n)-g(n) = O(s(n)-r(n)),我们有两个常数N,M验证定义:

for all n>N , |f(n)-g(n)|<M|s(n)-r(n)|

=&GT; for all n>N , |n-1|<0

=&GT;我不会再进一步​​了,你可以明智地为n选择一个适当的值,这会导致矛盾......

所以 s(n)-r(n)不是f(n)-g(n)的Big-O

b) false : 反例:

允许f(n)=1s(n)=1g(n)=n

我们有: f(n)=O(s(n))(N = 1,M = 1完成定义的工作)和f(n)=O(g(n))(相同,N = 1,M = 1)

让我们假设f(n)+g(n) = O(s(n)),我们有两个常数N,M验证定义:

for all n>N , |f(n)+g(n)|<M|s(n)|

=&GT; for all n>N , 1+n<M*1

=&GT;在这里我选择修复n for n=M+N (>N) , 1+M+N<M

=&GT;自for n=M+N (>N) , 1+N<0

以来不可能N>0

所以 s(n)不是g(n)+ f(n)的Big-O