我花了很多时间在这里和math.stackexchange上阅读关于Big-Oh的问题和答案,似乎这是最好的地方,因为math.stackexchange似乎不喜欢这类问题。所以我在我的CS课程上获得了一些关于uni的课程,但我并不完全理解它,并且希望你们可以提供帮助。我理解“家庭作业”的问题在这里略显皱眉,所以我选择了另一个例子不我的课程作业,但是类似的风格。
所以这是我在笔记中给出的定义:
我给出的问题是:
使用定义2.5表明,如果f(n)是O(g(n)),那么k + f(n)也是O(g(n))。
我花了3天的时间在网上搜索这些问题的任何答案。从定义2.5可以看出,f(n)是O(g(n)),k + f(n)是O(g(n))。这对我来说已经足够了,但似乎我必须证明这是如何产生的。我一开始认为它应该通过归纳以某种方式完成,但从那时起就决定反对,并且必须有一种更简单的方法。
任何帮助将不胜感激。我不指望有人直截了当地给我答案。我更倾向于使用方法论或参考我可以学习这种技术的方法。我可以再次提醒你,这是不我的实际课程,但是类似风格的问题。
先谢谢。
答案 0 :(得分:2)
假设f(n)是O(g(n))
然后存在c和k's.t.对于所有n> k':f(n)< = cg(n)
现在考虑f(n)+ k
对于大于k'的所有n,令d为s.t k <= d * g(n)
你知道这是可能的,因为k在O(1)
中
然后
f(n)+ k <= cg(n)+ dg(n)=(d + c)(g(n))
然后使用定义并用d + c代替c,==&gt; f + k在O(g)
答案 1 :(得分:1)
f(n)&lt; = cg(n)
k + f(n)&lt; = c'g(n) 其中c'= ck
所以k + f(n)是O(g(n))
答案 2 :(得分:0)
然后k
为O(1)
,f(n)
为O(g(n))
,那么您可以对这些值求和,然后O(1+g(n))
这是O(g(n))
;
f(n)
为O(g(n))
,k + f(n)
也为O(g(n))
,因为您已在书中写过
忽略添加常量
始终忽略常量,因为无法更改 Big-O 表示法,O(1)
表示法中任何常量都为Big-O
。
答案 3 :(得分:0)
对于它的价值,这是一个有点人为的大O符号的定义。更一般的,在我看来,更直观的定义是,对于某些有限实数f(n) ~ O(g(n))
,n->a
为lim|f(n)/g(n)| <= A
iff n->a
为A
。
重要的是要求限制上下文。在CS中,该限制被隐式地视为无穷大(因为这是问题大小增加时n
倾向于的),但原则上它可以是任何东西。例如,sin(x) ~ O(x)
为x->0
(事实上,它与x
完全渐近;这是小角度近似值。)