-
비트마스크 / 비트마스킹알고리즘/Common 2021. 5. 23. 12:06
■ 비트마스킹
1) 정의 :
어떠한 데이터를 bit형태로 나타내고, 비트 연산을 통해 문제를 해결하는 방법
2) 장점 :
- 비트연산을 통한 삽입, 삭제, 조회(multiple indexing처럼 동작 가능)가 간단
- 간결한 코드
- 빠른 연산
- 비트마스크 정수표현으로 다이내믹 프로그래밍 가능
■ 자료형의 변환
> 사용하고자 하는 형식을 표현하는 이진법으로 구현
switch_states = [True, False, False, True, True, False, False, False, True, True] switch_states = 0b1001100011 # prefix '0b'를 붙여 이진수 표현
다른 자료형에서 binary로 바꾸는 법
1) 일반적 int
bin( ) 함수를 사용, binary string을 돌려받는다
2) binary string
ex) '011101'
int(string_value, 2) 로 10진수로 return 받고 bin( ) 함수로 wrapping
■ 이진수 연산
1) AND ( & )
대응하는 숫자의 자리수가 피연산자 모두 1일 경우 1 반환
bin(0b1101 & 0b1001) # 비트 AND >>> '0b1001'
2) OR ( | )
대응하는 숫자의 자리수가 피연산자 모두 OR 연산이 1일 경우 1 반환
bin(0b1101 | 0b1001) # 비트 OR >>> '0b1101'
3) XOR ( ^ )
대응하는 숫자의 자리수가 피연산자가 서로 0 / 1 경우 1 반환
bin(0b1101 ^ 0b1001) # 비트 XOR >>> '0b100'
4) NOT 비트 반전 ( ~ )
피연산자 비트 반전
bin(~0b1101) # 비트 NOT >>> '-0b1110'
5) SHIFT 비트 이동 (<<, >>)
피연산자 비트 전체 shift
bin(0b0010 << 2) >>> 0b1000 bin(0b1100 >> 2) >>> 0b11
■ 비트 고급 연산
1) 원소 추가
n번째 비트에 원소 추가
n = 3 print(bin(0b0010 | (1 << n))) >>> 0b1010
2) 원소 제거
n번째 비트에 원소 제거
n = 3 print(bin(0b1010 & ~(1 << n))) >>> 0b10
3) 원소 조회
n번째 비트 원소 조회
없으면 0, 있을 시 1 이상의 수
n = 3 print(bin(0b1010 & (1 << n))) >>> 0b1000
4) 원소 토글
n번째 비트 원소 반전
n = 3 print(bin(0b1010 ^ (1 << n))) >>> 0b10
참조 :
https://dojang.io/mod/page/view.php?id=2460
반응형'알고리즘 > Common' 카테고리의 다른 글
[수정필요] 다이나믹프로그래밍 vs D and C vs Greedy vs 재귀 (0) 2021.07.28 동적 계획법(Dynamic Programming) / 분할 알고리즘(Divide and Conquer) (0) 2021.03.25 시간 복잡도와 알맞는 알고리즘 선택 (0) 2021.03.23 Dynamic Programming( 동적계획법 ) (0) 2021.03.19 Recursive ( 재귀 ) (0) 2021.03.18