1. 程式人生 > >一個簡單的子集產生演算法

一個簡單的子集產生演算法

 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(
"{");
            
for (int j =0; j < toCharArray.length; j++)
            
{
                
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();    
    }

}