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

原创 2005年04月22日 14:59: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}

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

  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 08:35
  • 66

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

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

输出一个集合的所有子集合-Java代码实现(一)

找出一个集合的所有子集合,用排列组合的方式来解答ciwenti
  • foreverbu
  • foreverbu
  • 2014年07月08日 16:25
  • 2131

MongoDB 删除集合

drop() 方法 MongoDB 的 db.collection.drop() 是用来从数据库中删除一个集合。 语法: drop() 命令的基本语法如下 db.COLLECTION_NAME...
  • itmyhome
  • itmyhome
  • 2016年07月26日 22:02
  • 1179

回溯法 求集合全排列、子集

回溯法,参见之前的blog。 全排列: 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如...
  • gfsfg8545
  • gfsfg8545
  • 2013年11月30日 17:43
  • 4111

mongoDB 分组,拆分内嵌子集合

最近搞MongoDB,在使用的过程中,发现操作一条文档中的内嵌List的时候,需要用到聚合函数,用mongodb 的说法是,管道操作符。 用下面里例子来说:  我需要操作mioPlnmioInfo...
  • One_Rabbit2016
  • One_Rabbit2016
  • 2016年10月12日 14:15
  • 2691

输出一个集合的所有子集

输出字符串的所有子集 如:对“abc” 输出:  c b bc a ac ab abc 代码如下: // // main.cpp // 输出一个集合的所有子集 // // Created b...
  • u010005161
  • u010005161
  • 2016年08月10日 19:36
  • 1825

tushare module 3 -- 股票分类数据

分类数据提供股票的分类信息数据,从股票类型的不同角度进行数据分类。 1. 行业分类 在现实交易中,经常会按行业统计股票的涨跌幅或资金进出,本接口按照sina财经对沪深股票进行的行业分类,返回所有股...
  • niceSimon7
  • niceSimon7
  • 2016年07月11日 19:37
  • 1744

最大相容活动子集合 贪心法

主要学习sort的用法和贪心法 测试例: 11 1 4 3 5 5 7 0 6 3 8 5 9 8 11 6 10 8 12 2 13 12 14 #inc...
  • fofu33
  • fofu33
  • 2013年05月18日 09:32
  • 843

求集合的所有子集(java实现)

代码: import java.io.File; import java.io.FileWriter; import java.io.IOException; /* *Created on 201...
  • caiandyong
  • caiandyong
  • 2015年01月31日 22:08
  • 1134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何得到某集合的所有子集合?
举报原因:
原因补充:

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