一個簡單的子集產生演算法
阿新 • • 發佈:2019-02-15
char[] A={'a','b','c','d',...},集合A中,產生所有A的子集{'a'},{'b'},{'a','b'},{'a','b','c'}...這些。
方法一: 根據二進位制產生
import java.text.*;publicclass SubSet {
publicstaticvoid main(String[] args) {
char[] chs ={'a', 'b', 'c', 'd'};
int len =4;
for (int i =0; i < Math.pow(2,len); i
{
String str = Integer.toBinaryString(i);
int toBinary = Integer.parseInt(str);
DecimalFormat df =new DecimalFormat("0000");
str = df.format(toBinary);
char[] toCharArray = str.toCharArray();
System.out.print("{");
{
if (toCharArray[j] =='1')
System.out.print(chs[j] +",");
}
System.out.println("}");
}
}
}
方法二:
publicclass PossibleSet{
publicstaticvoid main(String[] args)
int[] set =newint[4];
char[] chs ={'a', 'b', 'c', 'd'};
int i, n, position =0;
set[position] =1;
while(true)
{
System.out.print("{"+ chs[set[0] -1]); // 第一個數
for(i =1; i <= position; i++)
System.out.print(","+ chs[set[i] -1]);
System.out.println("}");
if(set[position] < set.length)
{ // 遞增集合個數
set[position+1] = set[position] +1;
position++;
}
elseif(position !=0)
{ // 如果不是第一個位置
position--; // 倒退
set[position]++; // 下一個集合尾數
}
else// 已倒退至第一個位置
break;
}
System.out.println();
}
}