寻找 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。

    对于正的xyx < y 当且仅当log(x) < log(y)。 (有时记录日志可以帮助处理复杂和凌乱的产品。

    log(k^n) = log(k) n.

    对于 O、theta 和 omega,您可以忽略所有内容,除了不会抵消的最大项。

规则 1 和 5 足以解决您的具体问题。但是要学习所有的规则。

【讨论】:

以上是关于寻找 Big-O、Omega 和 theta的主要内容,如果未能解决你的问题,请参考以下文章

O(big oh) (big omega) (big theta)

对渐进符号的理解

数模学习——最小二乘法

算法导论 第三章 函数的增长

为什么要进行归一化处理?(从寻找最优解这个角度讨论)

梯度下降