1. 程式人生 > >怎樣找出集合中所有子集,怎樣找出集合中指定元素的所有子集?

怎樣找出集合中所有子集,怎樣找出集合中指定元素的所有子集?

集合中的組合演算法

Java 沒有自帶的求一個集合的所有子集的方法,我們可以通過集合的子集規律來求。

思路:
對集合中所有元素進行標記,0表示未選中,1表示選中。

示例:
集合{1,2,3,4},長度為4,則 0000表示一個都不選,0001表示選數集合中第一個元素 {1}0010表示選中集合中第二個元素 {2},0011表示選中第一,第二元素 {1,2}
以此類推,集合{1,2,3,4}的所有集合,包括空集,可以表示為0000-1111這樣的二進位制位碼。
我們可以看出集合的所有子集的個數,是2^3=8個。

由此,可以推理,如果我們需要輸出所有的子集,只需要將每個子集用0001這樣的二進位制編碼表示,然後按照此二進位制碼輸出選中的元素即可,十進位制0

-15,恰巧可以表示為二進位制0000-1111,這樣求集合的所有子集就比較簡單了,所有的子集就是:0 -(2^元素數-1)表示為二進位制編碼所對應的集合元素的選擇。

在這裡插入圖片描述
於是,根據上面的規律,程式碼可以這樣寫,先取集合的長度,求出2^該集合的長度是多少,比如上面的16,然後從0遍歷到16-1。
遍歷的時候,對0、1、2…每一個數據進行位運算,逐一判斷其對應的位數,也就是二進位制的表示方式,是1表示選中,0表示未選中。