Big O(2 ^ n)的这种解释是什么意思?

时间:2015-01-18 12:36:48

标签: algorithm

我在Skiena的算法设计手册中读到了关于Big Oh符号的内容,并且遇到了O(2 n )的以下解释:

  

指数函数:枚举n个项目的所有子集时,会出现类似2 n 的函数。

这就具体例子而言意味着什么?

假设我有集合:{1,2,3,4}(因此n = 4),这意味着(根据Skiena的定义)子集数量 2 4 这是16个子集。我无法弄清楚这16个子集是什么。

关系 2 n 中的2是否意味着子集的大小限制为2?

编辑:我想我要问的部分是,为什么 2 n 而不是 3 n 例如?这对我来说根本不直观。

2 个答案:

答案 0 :(得分:5)

以下是{1, 2, 3, 4}的所有有效子集的列表:

{}                                           1

{1}, {2}, {3}, {4}                        +  4

{1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4}  +  6

{1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}        +  4

{1,2,3,4}                                 +  1

                                          = 16

计数为2ⁿ而不是3ⁿ的原因是要创建子集,您可以想象通过每个元素并做出决定“是否是子集中的元素?”

也就是说,您为每个n元素选择两种可能性(in和out),因此做出此决定的方式总数(以及子集的总数)是

    2 * 2 * 2 * .... * 2
    \________  ________/
             \/
           n times

2ⁿ

答案 1 :(得分:1)

  • 0个元素的一个子集:{}
  • 1个元素的四个子集:{1} {2} {3} {4}
  • 2个元素的六个子集:{1,2} {1,3} {1,4} {2,3} {2,4} {3,4}
  • 3个元素的四个子集:{1,2,3} {1,2,4} {1,3,4} {2,3,4}
  • 4个元素的一个子集{1,2,3,4}

总计子集因此是十六。

2中的2n只是意味着“工作量”与n的指数函数成比例上升。这甚至比n2更糟糕,它只是随着方格而上升。

这组有限集的所有集合称为power set,如果确实想知道它为2n的原因,那么该页面的属性部分说明:

  

我们以S格式编写{X1, X2, ..., Xn}的任何子集,其中Xi,1<=i<=n可以取01的值。如果Xi = 1,则i的{​​{1}}元素位于子集中;否则,S - 元素不在子集中。显然,可以用这种方式构造的不同子集的数量是i

基本上,外行人的意思是,在给定的子集中,每个元素可以存在或不存在。因此,可能性的数量类似于您使用2n - 位二进制数字所看到的。

对于一位,有两种可能性n,相当于具有子集0/1的集合{a}

对于两位,四种可能性{} {a},相当于具有子集00/01/10/11的集合{a,b}

对于三位,八种可能性{} {a} {b} {a,b},相当于具有子集000/001/010/011/100/101/110/111的集合{a,b,c}

依此类推,包括四个元素的下一步,提供十六种可能性,如上所述。