子集生成(二进制法)-java实现

来源:互联网 发布:新浪财经数据 编辑:程序博客网 时间:2024/06/11 18:42

给定子集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-1for(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();}}


0 0
原创粉丝点击