渐近符号

时间:2012-02-18 12:17:17

标签: algorithm math asymptotic-complexity

这是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

2 个答案:

答案 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)。