我在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 例如?这对我来说根本不直观。
答案 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)
{}
{1} {2} {3} {4}
{1,2} {1,3} {1,4} {2,3} {2,4} {3,4}
{1,2,3} {1,2,4} {1,3,4} {2,3,4}
{1,2,3,4}
总计子集因此是十六。
2
中的2n
只是意味着“工作量”与n
的指数函数成比例上升。这甚至比n2
更糟糕,它只是随着方格而上升。
这组有限集的所有集合称为power set,如果确实想知道它为2n
的原因,那么该页面的属性部分说明:
我们以
S
格式编写{X1, X2, ..., Xn}
的任何子集,其中Xi,1<=i<=n
可以取0
或1
的值。如果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}
。
依此类推,包括四个元素的下一步,提供十六种可能性,如上所述。