作为家庭作业,我已经获得了以下几项任务:
设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)方程并反驳它。我最确定这是一件非常容易的事情,我只是忽略了,而且我现在很愚蠢 - 但是如何做到这一点的任何指针/具体例子都会很棒,所以我应该能够工作其余的这些问题都是我自己的。
答案 0 :(得分:4)
为什么要在不使用反例的情况下反驳它?这是反驳声明的最直接方式。
如果你必须证明它,当然你将无法使用反例。在这种情况下,对立可以很好地工作 - 假设声明是错误的,然后显示它是如何导致逻辑不一致的。
在这种情况下,您从f(n) <= c1 * g(n)
开始为真,因为这是f(n) = O(g(n))
的含义。现在你想假设所有g(n) <= c2 * f(n)
和f
都g
为真(这最后一部分非常重要,因为你当然可以选择f
和g
这是真的),并说明为什么这不起作用。我的提示:选择一个f
和一个g
使其无法正常工作,并通过您选择c1
和c2
来表明它无法正常工作。
答案 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)