在确定big-O运行时时处理1/2 ^ n?

时间:2013-09-23 23:14:14

标签: algorithm math big-o

我必须找到以下表达式的大O符号:

  

2n + n(logn) 10 +(1/2) n

如果我忽略系数,我得到2n + n(log n) 10 加上一些涉及1/2的项。如果我忽略系数,我完全失去了最后一个词,但包含它们似乎并不合适。

我应该如何处理(1/2) n 术语?

2 个答案:

答案 0 :(得分:5)

对于较大的n(1/2)n接近0并且变得可以忽略不计。此外,与2n相比,n(logn)10最终变得可以忽略不计,因为后者增长得更快。

n(logn)102n进行比较相当于将(logn)102进行比较(因为两者都包含因子n)。显然,(logn)10会超过2足够大的n - 实际上所需要的只是n 3。随着n进一步增长,这两个术语之间的差异也将增加,2n术语的重要性将变得越来越小。

因此,我们留下的大O表达式是

O(n(logn)10)

答案 1 :(得分:5)

当n变大时,想想(1/2) n 会发生什么。这个术语变得越来越小,最终变得完全可以忽略不计。 (事实上​​,如果你选择n = 30,它小于1 / 1,000,000,000。)一个有用的观察结果是(1/2) n )从不大于1/2,所以你可以注意到该

  

2n + n(log n) 10 +(1/2) n ≤2n+ n(log n) 10 + 1 / 2

从那里,您可以看到这是O(n(log n) 10 ),因为n(log n) 10 项比2n增长得快术语

但是,通常情况下,你必须小心使用指数。对于>形式为 n 的任何形式1将比任何多项式增长得快,所以通常你会丢弃多项式并保持指数。在这里,你做的恰恰相反。

希望这有帮助!