【发布时间】:2012-02-18 12:17:17
【问题描述】:
这是 MIT OpenCourse Introduction to Algorithm 作业中关于Asymptotic Notation 的问题:
对于以下每个陈述,确定对于渐近非负函数 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。
【问题讨论】:
-
假设 ||n sin(n)||应该读为 |n sin(n)|并参考实数的绝对值(当然,这是 R^1 上的向量范数),反例是有道理的。可以选择 n*(1+(-1)^n) = 0, 0, 2, 0, 4, 0, 6, ... 代替。
-
一个教学旁注:也许您希望 f=O(g) 成为函数集的偏序,因为对于实数 f、g,它感觉与 f≤g 非常相似。
标签: algorithm math asymptotic-complexity