寻找 Big-O、Omega 和 theta
Posted
技术标签:
【中文标题】寻找 Big-O、Omega 和 theta【英文标题】:Finding Big-O, Omega and theta 【发布时间】:2015-05-03 13:16:50 【问题描述】:我已经浏览了这些链接,但我太脑残了,无法理解找出它们的机械过程。我了解 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) 越大,是否意味着数字变大或变小?
请允许我补充一下,我真正的困难在于弄清楚 omega 和 theta。根据定义 f(n)
【问题讨论】:
Windows 计算器具有日志功能。记录一些 n,看看你得到了什么结果。至于log函数是什么:y = log(x)。 10^y = x。您可以使用其他底座,将 10 替换为您正在使用的任何底座。除了 2 和 e 之外,我从未见过其他值。 (后者称为自然对数。) 【参考方案1】:你不需要记住规则,而是学习一般原则。
在这里,你只需要知道 log(n) 是无限增加和增长的,还有 big-O 的定义,即 f = O(g) 如果有 ac 使得对于所有足够大的 n,f (n)
log^2(n) 可以是 O(log(n)) 吗?这将意味着(使用 big-O 的定义)对于所有足够大的 n,log^2(n)
log(n) 可以是 O(log^2(n)) 吗?好吧,在某些时候 log(n) > 1(因为它无限增加),从那时起,log(n)
(*) 如果您格外小心,则需要排除 log(n) 无限多次为零的可能性。
【讨论】:
【参考方案2】:你通常可以从这些规则中弄清楚:
广泛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 足以解决您的具体问题。但是要学习所有的规则。
【讨论】:
以上是关于寻找 Big-O、Omega 和 theta的主要内容,如果未能解决你的问题,请参考以下文章