如何证明大O符号

时间:2015-12-14 18:41:39

标签: c++ algorithm math theorem-proving

在我的算法类中,我们正在讨论大O符号,我很难证明这个示例问题:

证明f(n) = 3n lg n + 10n + lg n + 20 = O(n lg n)

详情将不胜感激。

2 个答案:

答案 0 :(得分:1)

你需要证明的是,对于某些M和X0:
对于大于X0的所有n,M n ln n> = 3n lg n + 10n + lg n + 20

对于M

4非常容易

我确定你可以计算出上述不等式所持有的一些x0,然后很容易证明它对于大于X0的所有n都是正确的

在4中替换后,有助于简化上述内容 (n-1)lg n> = 10n + 20

一旦n足够大,应该清楚lg n> 1,因此任何超过n的增加都会使右边增加1而左边增加1以上。

答案 1 :(得分:0)

Big O符号是一种渐近符号,它完全是关于案例的近似(最差,最佳和中间)。
在您的示例中,nlgnnlgn增长得更快,而且常量值不相关,可以在这样的近似值中忽略。
因此,复杂性为O(nlgn)