完全ナビゲーションビット演算子


#부분집합의 모든 경우를 순회하며
power_set = []
n = 3
arr = [i+1 for i in range(n)]
print(arr)
for i in range(1<<n) : #1부터 12까지를 원소로 가지는 집합의 부분집합의 수는 2의 12승
    tmp_set = [] #부분집합을 담을 임시저장소
    #n만큼 j가 순회하며
    for j in range(n) :
        #i의 j번째 비트가 1인지 아닌지 확인
        if i & (1<<j) :
            #for문을 순회하며 and연산 결과 True이면 A리스트의 j인덱스를 tmpset에 추가
            #ex 13이면 1101 이니까, 1,3,4번째 비트 추가
            tmp_set.append(arr[j])
    power_set.append(tmp_set)
print(power_set)
Power set
  • 部分集合のすべての要素を準備する
  • 元の集合arr準備
  • nはarrの長さ
  • である
  • 部分集合の要素和は2^nであるため、1<である
    一時リポジトリtmp set準備
  • 部分集合
  • すなわち,部分集合の要素は2のn乗個であるため,n−1ビット,すなわち巡回
  • である.
  • iをビットに変換する場合
  • (例えば、iが13である1101)jも、1,000,100,10,1のように
  • が存在する.
  • で0位、2位、3位が重なると、そのjをインデックスとしてarr配列で値を検索し、一時リポジトリに格納します.
  • 演算終了後パワーセット、
  • を入れる