刚开始学习算法。因此,练习是找出if语句总是/有时是真还是假。 Em,我的逻辑在哪里失败了?
f(n) != O(g(n)) and g(n) != O(f(n))
O符号是0 <= f(n) <= cg(n)
,其中c
是常量。所以在这里不相等意味着:
f(n) > cg(n) and g(n) > cf(n)
如果f(n) = g(n) = 1
,请说c = 1/2
:
1 > (1/2)*1 and 1 > (1/2)*1
在这种情况下确实如此。但这本书说这在特殊情况下是错误的。我误解了哪一部分?
答案 0 :(得分:2)
对于某些常量,Big-O本身不是0 <= f(n) <= c g(n)
。存在一个数字 c ,使得该关系适用于 n 的“足够大”的值。 (当我们将Big-O称为渐近符号时,这是我们所指的“渐近”,其他常见的是Big-Theta和Big-Omega。)
例如,假设有一个算法使用n
元素对某些数据结构进行操作,并采用3n^2 + 7n + 18
步骤。请拨打此f(n)
。我们说这个表达式的Big-O是O(n^2)
因为存在一个常量(在这种情况下大于3的任何值),所以对于n
的所有“足够大”的值,{{1} }。