bit全探索

ビット全探索とは、二進数とビットを用いて、ある集合の部分集合を全列挙(全探索)する便利なアルゴリズムです。

<ソース>

public class Main {

    // bit全探索
    public static void main(String[] args) {
        String[] 要素 = {"A","B","C", "D"};
        int 要素数 = 要素.length;
        StringBuffer sb = new StringBuffer();

        for (int i=0; i<(Math.pow(2,要素数)); i++) {
            sb.setLength(0);
            for (int j=0; j<要素数; j++) {
                int bit = 1&i>>j;
                System.out.print(bit);

                if (bit == 1) {
                    sb.append(要素[j]);
                }
            }
            System.out.print(" -> ");
            System.out.println(sb.toString());
        }
    }
}

<実行結果>

0000 -> 
1000 -> A
0100 -> B
1100 -> AB
0010 -> C
1010 -> AC
0110 -> BC
1110 -> ABC
0001 -> D
1001 -> AD
0101 -> BD
1101 -> ABD
0011 -> CD
1011 -> ACD
0111 -> BCD
1111 -> ABCD