我已经仔细查看了这些链接,而且我太过头脑,无法理解将它们搞清楚的机械过程。我理解O,theta和omega的想法,我理解“规则”。因此,让我与你们一起研究这个例子,以便在脑海中清除这一点:)
f(n)= 100n + logn
g(n)= n +(logn)2
我需要找到:f = O(g),或f =Ω(g),还是两者(在这种情况下f =Θ(g))
所以我知道100n和n是相同的,它们都比log(n)慢。我只需要弄清楚(log(n))^ 2是慢还是快。但我真的不记得有关日志的事情了。如果log(n)更大,是否意味着数字变大或变小?
请允许我加入我真正的斗争是找出欧米茄和theta。根据定义f(n)< = g(n)如果存在将使g(n)更大的常数c,并且对于ω的反向则相同。但我该如何测试呢?答案 0 :(得分:1)
您通常可以从这些规则中找到答案:
广泛地k < log(n)^k < n^k < k^n
。您可以在每个步骤中将k
替换为您想要的任何正数,并且对于足够大的n
,它仍然为真。
如果x
很大,那么1/x
非常接近0。
对于正面x
和y
,x < y
当且仅当log(x) < log(y)
。 (有时采用原木可以帮助解决复杂而混乱的产品。
log(k^n) = log(k) n
。
对于O,theta和omega,你可以忽略除了没有取消的最大术语之外的所有内容。
规则1和5足以满足您的具体问题。但要学习所有规则。
答案 1 :(得分:0)
你不需要记住规则,而是学习一般原则。
在这里,你需要知道的是log(n)正在增加并且无限制地增长,并且big-O的定义,即f = O(g),如果有ac,那么对于所有足够大的n,f (n)&lt; = c * g(n)。您可以通过记住log(n)增长与n的位数一样来了解日志的事实。
log ^ 2(n)可以是O(log(n))吗?这意味着(使用big-O的定义)log ^ 2(n)&lt; = c.log(n)对于所有足够大的n,所以log ^ 2(n)/ log(n)&lt; = c对于足够大的n(*)。但是log ^ 2(n)/ log(n)= log(n),它没有限制地增长,因此不能被c限制。所以log ^ 2(n)= O(log(n))。
log(n)可以是O(log ^ 2(n))吗?好吧,在某些时候log(n)&gt; 1(因为它在没有限制的情况下增加),并且从那时起,log(n)<1。登录^ 2(n)的。这证明了log(n)= O(log ^ 2(n)),常数c等于1.
(*)如果你格外小心,你需要排除log(n)无限次为零的可能性。