怎样找出集合中所有子集,怎样找出集合中指定元素的所有子集?

集合中的组合算法

Java 没有自带的求一个集合的所有子集的方法,我们可以通过集合的子集规律来求。

思路:
对集合中所有元素进行标记,0表示未选中,1表示选中。

示例:
集合{1,2,3,4},长度为4,则 0000表示一个都不选,0001表示选数集合中第一个元素 {1}0010表示选中集合中第二个元素 {2},0011表示选中第一,第二元素 {1,2}
以此类推,集合{1,2,3,4}的所有集合,包括空集,可以表示为0000-1111这样的二进制位码。
我们可以看出集合的所有子集的个数,是2^3=8个。

由此,可以推理,如果我们需要输出所有的子集,只需要将每个子集用0001这样的二进制编码表示,然后按照此二进制码输出选中的元素即可,十进制0-15,恰巧可以表示为二进制0000-1111,这样求集合的所有子集就比较简单了,所有的子集就是:0 -(2^元素数-1)表示为二进制编码所对应的集合元素的选择。

在这里插入图片描述
于是,根据上面的规律,代码可以这样写,先取集合的长度,求出2^该集合的长度是多少,比如上面的16,然后从0遍历到16-1。
遍历的时候,对0、1、2…每一个数据进行位运算,逐一判断其对应的位数,也就是二进制的表示方式,是1表示选中,0表示未选中。

猜你喜欢

转载自blog.csdn.net/igo2011/article/details/86308921