子集生成(二進位制法)-java實現
阿新 • • 發佈:2019-01-08
給定子集S,如{0,1,2,...n-1}:從右往左第i位表示元素i是否在集合S中。
package chp7; /** * 生成子集 * @author administrator * */ public class BinaryMethod { public static void main(String[] args) { //輸入集合S,求S的所有子集 int S[]={1,2,3,5,9}; //1向左平移S.length個長度就是2^S.length,列舉各子集所對應的編碼0,1,2,...2^S.length-1 for(int i=0;i<(1<<S.length);i++){ print(S,i); } } //根據每個子集的編碼對應在集合S中的位置,如00100,對應於S就是{3} public static void print(int[] S,int i) { int N= S.length; for(int j=0;j<N;j++){ //1<<j:從右往左,第j位置為1,其餘為全部為0,可以檢測i的第j位是否為1,如果為1,則輸出在S中的值 if((i & (1<<j))!=0 ){ System.out.print(S[j]+" "); } } System.out.println(); } }