证明/反驳BigO和BigTheta

时间:2014-02-06 20:46:52

标签: algorithm proof induction

我在完全理解如何证明以下某些陈述时遇到了问题。

例如,我有一个声明:n^2logn = O(n^2)。 如果我错了,请纠正我,但这表明n^2bigO的{​​{1}}。这意味着n^2logn的增长速度超过n^2。现在我们将如何证明这一点?我假设我需要使用感应证明,我试图使用但是在这个过程中卡住了。我可以将此声明重写为n^2logn吗?

是否可以使用归纳法反驳某些内容?例如,反驳n^2logn <= n^2。或者通过简单地表明任意值(例如大于2)不满足该陈述来反驳该陈述是否有效?

最后为了清楚起见,bigTheta声明方程在增长正确时是等价的吗?

2 个答案:

答案 0 :(得分:5)

n^2logn声明O(n^2)n^2中直观地表示n ^ 2logn的增长速度最快与n>N一样快 - (这种说法是错误的)。

根据定义,这意味着有一些常数c,N,对于每个c*n^2logn <= n^2N,c

通过矛盾反驳非常简单。
假设(错误地)声明是真的,让c*n^2logn <= n^2 c*logn <= 1 logn <= 1/c 成为我们的常数:

c

但是n>N是不变的,并且有一些logn > 1/c使n! < n^n - 矛盾。

您可以通过展示其他内容来反感,例如 - 如果您通过归纳显示n! = n^n - 您实际上反驳了声明{{1}}

关于大theta,我试图在帖子Big Theta Notation - what exactly does big Theta represent?

中详细解释这个问题

答案 1 :(得分:0)

我现在正在学习算法课程,所以我可以回答其中的一些问题,当我回家看看我的笔记时,我可以回答其余的问题。

  

例如我有一个声明:n ^ 2logn = O(n ^ 2)。如果我错了,请纠正我,但是这表明n ^ 2是n ^ 2logn的bigO。意味着n ^ 2比n ^ 2logn增长得快。

你是对的。

  

现在我们将如何证明这一点?我假设我需要使用感应证明,我试图使用但是在这个过程中卡住了。我可以将此语句重写为n ^ 2logn&lt; = n ^ 2?

     

是否可以使用归纳法反驳某些内容?例如,反驳n!= O(n ^ n)。或者通过简单地显示一个任意值让大于2不满足该陈述来反驳该陈述是否有效?

我会在几个小时内回复你。

  

最后为了清楚起见,bigTheta声明方程在增长正确时是等价的吗?

这意味着它们只是一个常数不同。换句话说,如果将它乘以常数,它将始终低于它所界定的函数,如果将它乘以另一个常数,它将始终高于它所界定的函数。

编辑:

为了测试大O,你在数学上表明代表算法增长的函数小于或等于一个常数乘以大O函数。

Big Omega显示该算法大于或等于大的Omega函数。

Big Theta可以通过两种方式证明:

  1. 证明大O和大欧米茄。

  2. 假设算法为f(n)且大Theta函数为g(n)。为了证明大的θ,你必须证明当n接近无穷大时f(n)/ g(n)的极限是一些常数,即,它既不是0也不是无穷大。

  3. 我希望有所帮助。如果您有更多问题,请告诉我,我们非常乐意为您提供帮助。