假设f(n) = O(s(n))
和g(n) = O(r(n))
。证明或反驳(通过举一个反例)以下声明:
我真的不知道从哪里开始......请向一名年轻学生伸出援助之手。请给出解释而不仅仅是解决方案。非常感谢你。
答案 0 :(得分:3)
正式定义:f(n)=O(s(n))
当且仅当存在两个常量M>0
和N>0
,例如for all n>N , |f(n)|<M|g(n)|
。 (存在等效定义,例如 adi 给出的定义,您可以在维基百科中找到更多内容)
这两个常数不是唯一的,但是它们不能依赖于变量n,如果它们不再存在,那么你就不会有任何常数。
我强烈建议您自己计算和操纵这些定义。只有阅读答案不足以应对涉及此处所述概念的未来问题
a) false : 反例:
让f(n)=n
,s(n)=n
,g(n)=1
和r(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)=1
,s(n)=1
和g(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