Bit全探索(ビット全探索)とは?

スポンサーリンク
Bit全探索(ビット全探索)とは? アルゴリズム

Bit全探索(ビット全探索)とは

Bit全探索 とは、

ビット列を使用し、全ての部分集合を列挙するための方法

です。

 

集合にn 個の要素があるとすると、全ての部分集合を列挙するためには \( 2^{n}\)回の操作が必要です。

これをbit全探索では、それぞれのビットが要素の選択・非選択を表すようにします。

例えば、集合{A, B, C} の要素数は3なので、 \( 2^{3} = 8\) 通りの部分集合が存在します。

各部分集合をビット列として表すと次のようになります。

 
ビット列 部分集合
000 ∅(空集合)
001 {A}
010 {B}
011 {A, B}
100 {C}
101 {A, C}
110 {B, C}
111 {A, B, C}

 

 

特徴

長所

長所
  • ビット演算を用いることで、部分集合を簡潔に列挙できる
  •  ビット列で部分集合を表現することで、問題の理解が容易になる

 

短所

短所
  • 計算量が大きい
  • 全ての部分集合をメモリに保持する必要がある場合、メモリ使用量が増加する

 

実装(Python)

実装

S = ['A', 'B', 'C']
N = len(S)

for bit in range(1 << N):
    subset = []
    for i in range(N):
        if bit & (1 << i):  # i 番目の要素が選択されているか判定
            subset.append(S[i])
    print(f"{bit:03b}: {subset}")
000: []
001: ['A']
010: ['B']
011: ['A', 'B']
100: ['C']
101: ['A', 'C']
110: ['B', 'C']
111: ['A', 'B', 'C']

 

参考文献

競技プログラミングの鉄則
created by Rinker

コメント

タイトルとURLをコピーしました