- 2
- 0
- 约小于1千字
- 约 7页
- 2022-04-22 发布于山东
- 举报
枚举;问题描述;集合A:(元素从小到大排列)
a1 a2 a3 a4 a5 a6 ……ai ……an
前i个元素构成的集合的子集总数:2i
第1小子集:{}
第2i-1+1小子集:{ai}
第2i-1+2小子集:{ai,a1}
第2i-1+3小子集:{ai,a2}
第2i-1+4小子集:{ai,a2,a1}
第2i-1+2j小子集:{ai,aj,……,a1}(j=i-1)
;归纳:
可以这么说:
1、前i个元素构成集合的第k小子集就是整个集合A的第k小子集
2、第2i-1+1~第2i小子集就是,前2i-1个子集,每个都添加ai元素;思路:
1、 对集合元素进行排序,小?大
2、确定第l小集合中最大的元素:2i-1l=2i
就是第i个数;
3、现在要确定第l小集合的第二个元素,只判断2j-1l-2i-12j的j取值,即第j个数;
2,3两步可以用位运算,if(k(1i)),l-1=kr
4、第三个元素也是一样……
5、直到j=0,完全确定了第l小子集!
6、往下判断第l+1小子集,重复2~5;
7、直到确定第r小子集,结束啦!
;代码;算法复杂度
原创力文档

文档评论(0)