求解关于集合子集个数的子集问题

& 求集合的子集在生活中经常遇到,例如集合{1,2,3}子集的个数为23个,分别为{ {},{1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}&大概有两种思路,一种是二进制方式方法,一种是使用深度遍历思想的方法
二进制表示方法
假设有一个三个元素的集合{1,2,3},集合可用3位二进制表示,如下:
0:000 -& {}
1:001 -& {1}
2:010 -& {2}
3:110 -& {1,2}
4:100 -& {3}
5:101 -& {1,2}
6:011 -& {2,3}
7:111 -& {1,2,3}
代码如下:
public void subSet()
int a[] = {1,2,3,4};
int num = 1 && 4; //子集的个数
int index = 0,k=0;
for(int i = 0; i & i++) //i 从1到15 就是真子集,i转化成二进制形式
System.out.print("{");
while(index != 0)
if((index & 1) != 0)
System.out.print(a[k]);
index &&= 1;//二进制每次移位(右移)一位,
System.out.println("}");
算法的输出就是上面的讲解。在实际应用中,常常需要把得到的子集给存储起来,可以把每次得到的子集放入到一个set中,下面将给出案例;
深度优先遍历方法
深度优先遍历方法(DFS)类似于树的先序遍历,它的基本思想是:首先访问图中某一起始点v,然后由v出发访问与v邻接且未被访问的任一顶点v1,再访问与v1邻接且未被访问的任一顶点v2.....,重复上述过程,直至不能再继续向下访问,依次退回到最近访问的顶点,若它还有邻接顶点未被访问过,从这顶点开始,继续上述搜索过程,直到所有顶点被访问过为止。常用在方案问题的求解、排列组合等问题中
public static void dfs(int[] a, int index, ArrayList&Integer& tmp, Set&ArrayList&Integer&& ret) {
ret.add(new ArrayList&Integer&(tmp));// 1
需要复制出来一个对象
for (int i = i & a. i++) {
tmp.add(a[i]);
dfs(a, i + 1,tmp, ret); //递归过程
tmp.remove(tmp.size() - 1);
int a[] = {1,2,3,4};
Set&ArrayList&Integer&& result = new HashSet&ArrayList&Integer&& ();
dfs(a, 0,new ArrayList&Integer&(), result);
System.out.println(result);
考虑数字序列{1, 3, 4, 2, 6,7,5,5,8,10,9,10,7,17},任取其中几个数字相加,使得到的和为29,则不同的组合有几种?详见
package lets.code.every.
import java.util.*;
public class Test {
public static int sum(ArrayList&Integer& tmp)
int sum = 0;
for (int i : tmp)
public static void dfs(int[] S, int index, ArrayList&Integer& tmp,Set&ArrayList&Integer&& ret) {
if (sum(tmp) == 29) //剪枝条件
ret.add(new ArrayList&Integer&(tmp));// 1 需要复制出来一个对象
for (int i = i & S. i++) {
tmp.add(S[i]);
dfs(S, i + 1, tmp, ret);
tmp.remove(tmp.size() - 1);
public static void main(String[] args) {
int a[] = { 1, 3, 4, 2, 6, 7, 5, 5, 8, 10, 9, 10, 7, 17 };
Set&ArrayList&Integer&& result = new HashSet&ArrayList&Integer&&();
dfs(a, 0, new ArrayList&Integer&(), result);
System.out.println(result.size());没有更多推荐了,
不良信息举报
举报内容:
子集和问题(动态规划解法)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!一个关于集合子集的问题_百度知道
一个关于集合子集的问题
设含m个元素的集合有T个子集,那么其中由n个元素组成的子集有多少个?(用含m,n的代数式表示,可以的话写下推导过程)
m个元素的集合有2^m个子集(每个元素可以选择属于或不属于子集)
不知道你的T的取法是什么,有限定这些子集的类型吗? n个元素组成的子集有多少个
简单的排列组合
采纳率:82%
n个元素组成的子集共2^n个。你的问法是有问题的。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。集合 子集问题_百度知道
集合 子集问题
已知非空集合S真包含于N,且满足条件“如果x属于S,那么x分之16属于S”
问:1.满足题设的集合共有几个?
2.空集能不能算一个满足题设的集合?
我知道第一个问题是用枚举法做出来的,但是我如果改用公式2n^2计算为什么不可以??
第二个问题就是空集...
可是书上有说明“空集是任何集合的子集,也是任何非空集合的真子集”
1)S的元素都是自然数,且成对出现,积为16 (元素 4 自成一对),在自然数中,1与16,2与8,4与4都是这样的元素对,因此满足题设条件的集合有 C(3,1)+C(3,2)+C(3,3)=2^3-1=7 个 。2)题目中说过,S是非空集合,因此空集不能统计在内。如果题目中没有“非空”这个限制,那么空集也应算作其中满足条件的一个集合。
C(3,1)+C(3,2)+C(3,3)=2^3-1=7 个 。为什么要“-1”呢?2^3-1不就是是指真子集的个数了么?为什么不是用2^3就可以了呢?? 其次空集是任何集合的子集,也是任何非空集合的真子集从这一点来看S是非空集合,是不能阻止空集是满足题设的一个集合啊???
由于题目中限制了《非空》这个条件,所以要去掉空集,当然要 -1 了。
可是-1代表的是真子集个数,去掉的应该是最大的那个子集;而非空真子集应该-2啊!
这个 -1 就是要减去一个空集 。
中学高级教师
1。由于 x,16/x都属于S,且均为自然数,从而 x是16的约数,即 x可以取1,2,4,8,16。分析:由于S中的元素一般要成对出现(4除外),故不能按2^5=32来计算S的个数。(1)S中有一个元素时,S={4};(2)S中有两个元素时,S={1,16}、{2,8};(3)S中有三个元素时,S={1,4,16}、{2,4,8};(4)S中有四个元素时,S={1,2,8,16}(5)S中有五个元素时,S={1,2,4,8,16};从而,共有7个。2.从另一角度来解释一下空集为什么满足题设条件。条件“如果x属于S,那么16/x属于S“ 的等价形式为“如果16/x不属于S,那么x不属于S”
(原命题和逆否命题等价)很明显,空集满足这个条件。 但题目要求S非空,故空集不能计算在内。
为什么不是用2^3就可以了呢??为什么不能用集合公式解题???答案算出来明显是不同的 其次空集是任何集合的子集,也是任何非空集合的真子集从这一点来看S是非空集合,是不能阻止空集是满足题设的一个集合啊???
1.S中有5个可选元素,当然不能用2^3来计算。由于这5个元素并不是自由的,如选1时,必需同时选16,所以也不能用2^5来计算。2.当然,由于题设S非空,就应该把空集排除。
1.我觉得把成对的元素看做是一个整体就可以用公式2^3来计算?! 2.空集是任何集合的子集,也是任何非空集合的真子集!!!!!!!!!! 那怎么解释这句话,书上的原话啊!!!!!!!
如果是这样理解,当然可以。1,16,看做一个,2,8看做一个,4是一个,这样,S的可选元素有3个,共有2^3 -1=7个非空子集。
本回答被网友采纳
这个……第一题吧:{2,8}{4}{1,16}{5,16/5}{n,16/n}……还有 他们的组合如{2,8,4}这应该是无穷的,我的理解对么?第二题,如果S是空集,为什么题中还说 ‘‘已知‘非’空集合S’’如果是空集x何来,且满足条件“如果x属于S,那么x分之16属于S”这个怎么理解呢
为您推荐:
其他类似问题
子集的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何求数组或集合的所有子集? - 知乎2被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答Subsets[{1,2,3,4}]
Out:{{}, {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}}02 条评论分享收藏感谢收起写回答}

我要回帖

更多关于 集合子集个数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信