1. 程式人生 > >如何得到某集合的所有子集合?

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

我們都知道,一個含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}

相關推薦

如何得到集合所有集合?

我們都知道,一個含n個元素的集合擁有2^n個子集合,並且不難發現,其中每個子集合都是從0到2^n-1 每個數的二進位制格式中0 放棄,1選擇的結果,如下所示: {}           000 {1}         100 {2}         010 {1,2}    

輸出一個集合所有集合-Java程式碼實現(二)

接上篇,提供另外一種解題思路: 對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。在子集合裡的話用1表示,不在的話用0表示,那麼一個集合的子集合都可以用二進位制表示,假設集合為{1,2,3},那麼可以用下列二級製表示:000,001,010,0

輸出一個集合所有集合-Java程式碼實現(一)

找出一個集合的所有子集合,用排列組合的方式來解答此問題的話,假設集合裡面有n個元素,那個子集合的數目為2^n. 具體思路為:對於集合裡面的任何一個元素,有兩種可能,一種是在子集合裡,另一種是不在子集合裡。假如我們已經得到n-1個元素的子集合,那麼n個元素的子集合是:n-1個

輸出一個集合所有集合

    set<set<int> > result;     if (input.size() == 1)       // 集合只有一個元素,子集合就是自己     {         set<int> one;         one.insert(*input.beg

Set集合及其集合HashSet 、LinkedHashSet、TreeSet;Map集合及其集合HashMap、Hashtable;Collections(集合工具類);IO概述和異常

Set集合 TreeSet的排序例項 需求:儲存自定義物件到TreeSet集合中,並遍歷 package OBT; public class Student implements Comparable<Student>{ String

JAVA 獲取段時間內的所有日期集合

獲取指定日期 public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFo

獲取json數據中所有key集合

判斷 var seinfo color func esc json數據 eof mode /** * 獲取json數據中所有key */ function fetchResponseInfo(responseInfo){ //判斷是否為空

[LeetCode] 78. Subsets 集合

tinc ++i integer += pre distinct size_t sort contain Given a set of distinct integers, nums, return all possible subsets (the power set).

泛型,JDK5新特性,List集合實現類,Map集合,Set/TreeSet集合,asList

JDK5新特性 List集合子實現類 Map集合 Set/TreeSet集合 asList 一、泛型(JDK5以後新特性) 1、概述:泛型直接規定集合的存儲類型,將明確的集合類型的工作推遲到了創建對象或者調用方法的時候,屬於一種參數化類型,可作參數傳遞。2、優點(1)將運行時期異常提前到了

樹形結構根據節點查詢本節點及下屬所有節點的遞歸實現

ret sele 單位 returns rom append app mco param 數據表中CompanyId,ParentCompany,有層級關系,樹形結構根據某節點查詢本節點及下屬所有子節點的遞歸實現如下: public string id

unity深度查找個子物體和遍歷所有物體方法

new cal ons foreach 是我 destroy 目標 call void 本文總結一下關於unity的查找子物體的方法 首先說明一下這裏將講三種查找子物體方法: 查找固定路徑的某一個子物體的方法、通過名字深度查找某個子物體的方法、查找父物體下所有子物體的方

JAVA中所有集合有關的實現類都是這六個接口的實現類

length 數字 pack 有關 結構 [] rgs val 無序 JAVA中所有與集合有關的實現類都是這六個接口的實現類。 Collection接口:集合中每一個元素為一個對象,這個接口將這些對象組織在一起,形成一維結構。 List接口代表按照元素一定的相關順序

Java獲取兩個日期之間的所有日期集合

1.返回Date的list private List<Date> getBetweenDates(Date start, Date end) { List<Date> result = new ArrayList<Date>(); Calendar

java 集合分組,集合根據一條件分組,封裝成map形式

集合中為物件,根據物件中的某一屬性值分組   例子 1、實體類:構造方法、get/set方法、toString方法省略 public class User { private String id; private String name;

儲存過程遞迴樹結構實現(一節點下所有節點)三種方式

最近專案中碰到需要寫遞迴,就特意實現了集中實現方式,總結一下~ 情景:通過給出的機構id,得到該機構id以及所有的子機構資訊,機構id是UUID; 通過三種方式去實現,親自實現過,可直接用: 第一種:通過多次操作資料庫獲得所有子機構資訊。實現如下: /** * 遞

MongoDB新增使用者,登入命令,查詢所有資料庫集合命令

登入命令:db.auth("使用者名稱","密碼")注意要先切換相應資料庫. 查詢所有資料庫名:show dbs 查詢當前資料庫所有集合:show collections 定義:建立一個數據庫新使用者用db.createUser()方法,如果使用者存在則返回一個使用者重複錯

[LeetCode] Largest Divisible Subset 最大可整除的集合

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj

深入Collection集合介面List

今天來理順一下Java裡面的Collection集合以及裡面的子集合,請看下面這張圖片: Collectio集合有兩個子介面:List和Set List的特點:元素是有序的,元素可以重複,因為該集合體繫有索引 Set的特點:元素是無序的,元素不能重複 List集合底下的三

Java中Map集合及其

Collection集合的特點是每次進行單個物件的儲存,如果現在要進行一對物件的儲存,就只能用Map集合來完成,即Map集合中會一次性儲存兩個物件,且這兩個物件的關係:key = value結構。這種結構的最大特點是可以通過key找到對應的value內容。1.Map介面Map

JAVA----集合介面List

List List:列表        此介面對應的實現類的特點都是:有序的,可以重複的        重複與否與元素的equals方法有關 常用方法:       void add(int