【问题标题】:Which one is faster? O(2^n) or O(n!)哪个更快? O(2^n) 或 O(n!)
【发布时间】:2021-12-22 06:43:53
【问题描述】:

我正在研究算法的复杂性,并试图弄清楚我脑海中出现的这个问题 - O(n!) 比 O(2^n) 快还是相反?

【问题讨论】:

    标签: math time-complexity


    【解决方案1】:

    O(2^n)2 * 2 * 2 * ... 其中O(n!)1 * 2 * 3 * 4 * ...

    O(n!) 会很快变大 - 所以O(2^n) 会更快。

    例如:2^10 = 102410! = 3628800

    【讨论】:

    • 是的,但是如果我们以 n=3 为例,那么 O(2^n) 是 8 而 O(n!) 是 6,这意味着对于一个小的 n 值,O(2^ n) 比 O(n!) 快.. 这让我感到困惑
    • @Integrity Big-O 表示法意味着 ..当 N 接近无穷大时。 所以 N 的小值并不重要,重要的是 N 变大时会发生什么.
    【解决方案2】:

    您可以尝试使用 Stirling 近似 for n! https://en.wikipedia.org/wiki/Stirling%27s_approximation

     n! = (n / e)^n * sqrt(2 * Pi * n) * (1 + o(n)) 
    

    现在来比较一下

     O(n!) <=> O(2^n)
    

    为了找出正确的字母&lt;=&gt;,让我们计算一下limit

     lim (n! / 2^n) =
       n -> +inf
    
     lim (n / e)^n * sqrt(2 * pi * n) / 2^n >=
       n -> +inf
    
     lim n^n / (2 * e)^n >= // when n > 4 * e
       n -> +inf
    
     lim (4 * e)^n / (2 * e)^n =
       n -> +inf 
    
     lim 2^n = +inf
       n -> +inf
    

    所以

     lim (n! / 2^n) = +inf
       n -> +inf
    

    表示O(n!) &gt; O(2^)

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 2014-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多