如何证明大关系

时间:2010-02-07 16:50:19

标签: big-o

嘿,标题可能有点偏,所以如果你知道如何把它改进,请纠正它。

作为家庭作业,我已经获得了以下几项任务:

设f(n)和g(n)是渐近正函数。证明或反驳以下每个猜想。

a. f(n) = O(g(n)) implies g(n) = O(f(n))

现在,我真正的问题是 - 您将如何以正式的方式证明这一点?我知道上面的内容很简单,因为我可以很容易地提供一个反例来反驳它,但是为了论证,让我们说我们想要在没有反例的情况下这样做,当然这继续其他一些例子,其中这不起作用。

我有点卡住了,我写了下面的不等式(< =小于或等于)

f(n) <= c1 * g(n)
g(n) <= c2 * f(n)

但我不确定如何将这两个不等式组合成单个(in)方程并反驳它。我最确定这是一件非常容易的事情,我只是忽略了,而且我现在很愚蠢 - 但是如何做到这一点的任何指针/具体例子都会很棒,所以我应该能够工作其余的这些问题都是我自己的。

2 个答案:

答案 0 :(得分:4)

为什么要在不使用反例的情况下反驳它?这是反驳声明的最直接方式。

如果你必须证明它,当然你将无法使用反例。在这种情况下,对立可以很好地工作 - 假设声明是错误的,然后显示它是如何导致逻辑不一致的。

在这种情况下,您从f(n) <= c1 * g(n)开始为真,因为这是f(n) = O(g(n))的含义。现在你想假设所有g(n) <= c2 * f(n)fg为真(这最后一部分非常重要,因为你当然可以选择fg这是真的),并说明为什么这不起作用。我的提示:选择一个f和一个g使其无法正常工作,并通过您选择c1c2来表明它无法正常工作。

答案 1 :(得分:3)

一些提示:
不要忘记f(n) = O(g(n))set notation,您可以将其转换为数学形式的不等式。

您可以使用 O 注释执行简单操作:

  • f(n) = O(f(n))
  • c * O(f(n)) = O(f(n)),如果c是常数
  • O(f(n)) + O(f(n)) = O(f(n))
  • O(O(f(n))) = O(f(n))
  • O(f(n)) * O(g(n)) = O(f(n)g(n))
  • O(f(n)g(n)) = f(n) * O(g(n))

(计算机程序设计的艺术,第1卷 - O -Notation)