정구리의 우주정복
[알고리즘 기초] 파이썬 부분집합 알고리즘 (비트연산자) 본문
반응형
비트연산자를 이용해서 부분집합을 만들어보았다 (아주 헷 갈 림)
arr = [3,6]
n = len(arr)
for i in range(1<<n):
for j in range(n):
if i&(1<<j): #i의 j번째 비트가 1이면 j번째 원소 출력
print(arr[j],end=' ')
print()
arr 에 집합을 받아온다
n 은 집합 요소의 개수 (len)
a << n
a * (2의 n승)
& : and 연산 (둘다 1일때 1)
ex) a = 3 (0011) b = 5 ( 0101 ) ==> a&b = 1 (0001)
i 는 총 부분집합의 개수 (2^n) 만큼 실행된다 0000 , 0001 , 0010 , 0011 이 순서
j 는 0,1 이 들어가고 if 문의 (1<<j) 는 2^0(1) 2^1(2) 따라서 0001 0010 이렇게 두개가된다
if 문의 i&(1<<j) 는
0000 0001 == 0000
0000 0010 == 0000
0001 0001 == 0001 (0번째자리가 1)
0001 0010 == 0000
0010 0001 == 0000
0010 0010 == 0010 (1번째 자리가 1)
0011 0001 == 0001 (0번쨰 자리가 1)
0011 0010 == 0010 (1번째 자리가 1)
따라서
(공백)
3
6
3 6
이 출력된다 !
반응형
'ALGORITHM > BASIC' 카테고리의 다른 글
[알고리즘 기초] 브루트포스 (Brute-force) (0) | 2020.05.14 |
---|---|
[알고리즘 기초] 선택 정렬 (selection sort) (0) | 2020.05.10 |
[알고리즘 기초] 이진 검색 ( binary search algorithm) (0) | 2020.05.10 |
[알고리즘 기초] 순차 검색 (sequental search) (0) | 2020.05.10 |
[알고리즘 기초] 버블 정렬 (Bubble Sort) (0) | 2020.05.08 |
Comments