如何得到某集合的所有子集合?

原创 2004年07月24日 16:04:00

我们都知道,一个含n个元素的集合拥有2^n个子集合,并且不难发现,其中每个子集合都是从0到2^n-1 每个数的二进制格式中0 放弃,1选择的结果,如下所示:

{}           000

{1}         100

{2}         010

{1,2}      110

{3}         001

{1,3}      101

{2,3}      011

{1,2,3}   111

所以根据数字的二进制转换,可以轻松获得一个集合的所有子集合,代码如下:

Sub GETALL(ByVal mycollection As String, ByRef RESULT() As String)
Dim x() As String
x = Split(Mid(mycollection, 2, Len(mycollection) - 2), ",")

Dim A() As String, b() As Integer '临时数组
Dim n As Integer ' 集合元素个数
Dim i As Long '循环变量
Dim num As Integer '子集合元素个数
Dim TEMP As Integer '二进制转换中间变量
n = UBound(x) + 1
ReDim b(0 To n - 1)
ReDim RESULT(2 ^ n - 1)
Debug.Print "集合 " & mycollection & " 共有子集合 " & 2 ^ n & " 个!"

For i = 0 To 2 ^ n - 1
TEMP = i
num = 0
For j = 0 To n - 1 '转换为二进制
b(j) = TEMP And 1 '0 or 1
TEMP = TEMP / 2
If b(j) = 1 Then
num = num + 1
ReDim Preserve A(1 To num)
A(num) = x(j)
End If
Next

RESULT(i) = "{" & Join(A, ",") & "}" '结果保存
Debug.Print RESULT(i) '输出

Next
MsgBox "OK"
End Sub

Private Sub Command1_Click()
Dim S() As String
GETALL "{1,2,3,4,5,6}", S
End Sub

输出:

集合 {1,2,3,4,5,6} 共有子集合 64 个!
{}
{1}
{2}
{1,2}
{3}
{1,3}
{2,3}
{1,2,3}
{4}
{1,4}
{2,4}
{1,2,4}
{3,4}
{1,3,4}
{2,3,4}
{1,2,3,4}
{5}
{1,5}
{2,5}
{1,2,5}
{3,5}
{1,3,5}
{2,3,5}
{1,2,3,5}
{4,5}
{1,4,5}
{2,4,5}
{1,2,4,5}
{3,4,5}
{1,3,4,5}
{2,3,4,5}
{1,2,3,4,5}
{6}
{1,6}
{2,6}
{1,2,6}
{3,6}
{1,3,6}
{2,3,6}
{1,2,3,6}
{4,6}
{1,4,6}
{2,4,6}
{1,2,4,6}
{3,4,6}
{1,3,4,6}
{2,3,4,6}
{1,2,3,4,6}
{5,6}
{1,5,6}
{2,5,6}
{1,2,5,6}
{3,5,6}
{1,3,5,6}
{2,3,5,6}
{1,2,3,5,6}
{4,5,6}
{1,4,5,6}
{2,4,5,6}
{1,2,4,5,6}
{3,4,5,6}
{1,3,4,5,6}
{2,3,4,5,6}
{1,2,3,4,5,6}

linq 根据子集合的字段获取父集合(包含父集合下的子集合)

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We...
  • czh4869623
  • czh4869623
  • 2015年08月29日 23:48
  • 1424

动态规划_求连续整数的划分方案总数

题目: 对于从1到N的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。 举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等...
  • yyr2008
  • yyr2008
  • 2016年01月07日 00:51
  • 488

一个关于把集合拆分的有意思的小题目(将1到N的连续整数组成的集合划分成两个子集合)

今天上午,本来是老老实实的在敲着自己的代码,然后朋友在群里发了一个小题目,自己看了感觉挺有意思,当时就来了兴趣。想着要写一写。        题目是这样子的:             将1到N的连续整...
  • top_gun_1
  • top_gun_1
  • 2016年03月16日 15:40
  • 2195

输出一个集合的所有子集合

面试遇上了这个问题,思量了会,想到用递归的方式解决这个问题。回来网上搜索了下,发现通过二进制的思想来解决这个问题更容易,下面我把两种解决方式的思想及原码分享出来。 二进制方法实现: 我们都知道,一...
  • llg8212
  • llg8212
  • 2014年03月28日 15:52
  • 850

laravel baum嵌套集合模型简单操作

在Laravel中使用baum嵌套集合模型可以快速实现地区的添加和修改等无限极树状层级结构,比一般的递归效率要高出很多 首先放上Baum的在GitHub的官网文档,不过是英文的。etrepat/bau...
  • chWow
  • chWow
  • 2017年05月27日 08:43
  • 1305

List集合知识总结

在编程过程中,会很频繁的使用集合,集合的相关知识也非常重要,也是每一个开发人员必须掌握的知识。 一:集合的概念 集合:保存数量不确定的数据,以及保存具有映射关系的数据的容器,简单的理解就是用于存储数量...
  • yuanjian19900610
  • yuanjian19900610
  • 2013年03月11日 23:51
  • 3781

Iterator遍历有多级子集合的集合

文章的题目可能有点绕,举一个例子吧,我们想将一个公司的所有员工的姓名打印出来,这个公司的员工分为不同的层级,有公司直接领导的高级员工,也有员工是在公司的 一个子部门工作,还有的员工可能在一个公司的子部...
  • qq_34310242
  • qq_34310242
  • 2017年07月20日 22:03
  • 47

Java中集合的方法及子集(上)

package javaStudy; import java.util.ArrayList;//导入集合中的ArrayList类包 /** * * @author zhaocx1 * ...
  • nancy199006
  • nancy199006
  • 2015年02月07日 09:46
  • 1365

javaAPI:集合框架2(Map集合及其子集合)

一:集合转成数组。 Collection接口中有一个toArray方法。可以完成。 importjava.util.*; class  CollectionToArray{      publ...
  • lilylikejack
  • lilylikejack
  • 2013年11月19日 15:13
  • 531

Java8新特新--Stream语法应用在ArrayList的元素移除和排序

A sequence of elements supporting sequential and parallel aggregate operations:支持顺序和并行聚合操作的元素序列。...
  • Appleyk
  • Appleyk
  • 2017年12月22日 14:56
  • 232
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何得到某集合的所有子集合?
举报原因:
原因补充:

(最多只允许输入30个字)