这是MIT OpenCourse 算法简介分配渐近符号的问题:
对于以下每个陈述,判断渐近非负函数 f <始终为真,永远不是真,有时为真 < / em>和 g 。如果始终为真或从不为真,请解释原因。如果它是有时是真的,请给出一个它为真的示例,以及一个为假的示例。
f(n) ≠ O(g(n)) and g(n) ≠ O(f(n)) (both are Big-O notes)
我认为永远不是真的。这是我的证明:
f(n) ≠ O(g(n))
=> f(n) = w(g(n)) (little-omega note)
=> g(n) = o(f(n)) (little-o note)
=> g(n) = O(f(n)) (big-O note)
结果与g(n) ≠ O(f(n)) (Big-O note)
相矛盾。同样,
g(n) ≠ O(f(n))
=> g(n) = w(f(n)) (little-omega note)
=> f(n) = o(g(n)) (little-o note)
=> f(n) = O(g(n)) (big-O note)
与f(n) ≠ O(g(n)) (Big-O note)
相矛盾。
解决方案说有时是真的:
For f(n) = 1 and g(n) = ||n*sin(n)|| it is true,
while for any f(n) = O(g(n)), e.g. f(n) = g(n) = 1, it is not true.
我的证明在哪里做错了?另外,我无法理解解决方案。 ||n*sin(n)||
对我来说就像 vector norm 。
答案 0 :(得分:3)
我认为n*sin(n)
只是表明它是一个不断变大的功能。小于f(n) = 1
的后续n值,即使是用于定义Big O&amp;的常数乘数的所有选择。因此f(n) ≠ O(g(n)) and g(n) ≠ O(f(n))
天真选择的功能如g(n) = 2*sin(n)
在这里不会有用。有人可能认为这也会在f(n) = 1
左右交替,但g(n) = O(f(n)) : M*f(n) > g(n) for M = 3
等
答案 1 :(得分:2)
第一种情况并非如此:从f(n) ≠ O(g(n))
开始,它不遵循:f(n) = w(g(n))
。这两个函数可能在某个点交叉然后拍打地方,另一个变得更大(如果我使用简单的单词)。
他们选择的功能就是这种情况:对于n <= 1,第一个f(n)&gt; g(n)存在与g(n)> 1的ns。 f(n)(例如pi / 2)。