注释:打印集合的所有子集
来源:互联网 发布:杭州单片机工程师招聘 编辑:程序博客网 时间:2024/05/16 06:46
已知一个集合,其子集包括空集和本身。怎样将所有的子集打印出来?最简单的O(N^3)算法不难想到,但是太过于朴素,应该还有更巧的方法。
我们已知,一个元素个数为n的集合,其子集个数为2^n个。比如set { 1, 2 },含有两个元素,一共有四个子集,分别为{ },{ 1 },{ 2 },{ 1,2 }。 我们取一个只有两位的bitset,显然这个两位的bitset只有四种组合,00、01、10、11。 假设我们让bitset的每一位对应上面集合中的一个元素,那么集合的每个子集就可以用bitset的一个组合来表示:
{ } 对应 00
{ 1 } 对应 01
{ 2 } 对应 10
{ 1,2 } 对应 11
在这个对应关系中,bitset的某一位为1,则代表其对应的集合中的元素选入这个子集,为0则代表不选入。
扩展开,一个具有n个元素的集合,可以用n位的bitset来表示, 将n位的bitset转换为十进制,其范围刚好就是【0,2^n)。上面的特例,bitset转换为十进制后,分别为0、1、2、3。那么,打印一个集合的子集,我们只需要遍历从0到2^n-1的数字,将每个数字看作bitset,只要某位为1则输出该位对应元素。
根据这个思想,形成代码:
//felix:算法思想, {a,b,c,d...) 与二进制的0x11111..每一位互相对应. 形成映射. 相当于一个元素代表一个数。总共会有2^n-1个数,算法是遍历各个数,将一个总和拆成几个基本数的连加.
输出结果:
0 0
- 注释:打印集合的所有子集
- 打印集合所有的子集
- 打印集合的所有子集
- 一个集合所有子集和为sum的组合打印
- 打印字符串所有的子集
- 求集合的所有子集
- 一个集合的所有子集
- 求集合的所有子集
- 输出集合的所有子集
- 求集合的所有子集
- Leetcode031--集合的所有子集
- 求集合的所有子集
- 求集合的所有子集
- (用二进制的思路)给定一个集合S,打印出集合所有的子集
- 给定一个集合(字符数组),打印出它的所有子集
- 打印出数组的所有子集
- 求集合的所有子集的算法
- 求集合的所有子集的算法
- 数据传输、数据模型与Dozer
- 每日一linux命令(43)-------traceroute命令
- 面向对象方法编一个简易的控制台版贪吃蛇(一)
- 树的子结构
- HDU 5371 Hotaru's problem(Manacher)
- 注释:打印集合的所有子集
- Quadratic Bezier curve length
- Introduction
- Django基础 :session会话、认证系统、内容分页、中间件
- 软阈值(Soft Thresholding)函数解读
- 注意fft画图横坐标的设置
- git的使用指令
- 小技巧汇总(不定时更新···)
- 机房收费系统—结账