Search
Duplicate
📝

[브루트포스] 비트 마스크

상태
미진행
수업
Algorithm
주제
Alogorithm-Theory
4 more properties

비트연산

비트연산을 사용해서 부분 집합을 표현하는 방법

비트연산 종류

&(and) , |(or), ~(not), ^(xor)

비트연산 방법

A = 27, B = 83 인 경우
A = 11011 , B = 1010011
A & B = 19
A | B = 91
A ^ B = 72

비트연산의 시간복잡도

O(1) 내부에서 알아서 상수시간 안에 처리
not 연산은 자료형에 따라 달라짐
shift left (<<) , shift right(>>)
shift left의 경우 0이 추가로 생기고
shift right의 경우 낮은 자리 비트를 없애 버린다.
2^n → ( 1 << N )
(A+B)/2 → (A+B) >> 1

비트연산의 장점

정수로 집합을 나타낼 수 있다
{1,3,4,5,9} = 570 = 2+8+16+32+512 와 같이 원래는 배열을 이용했던 것을 정수 하나로 표현할 수 있다는 장점이 있다
비트마스크는 정수이다
정수라는 점이 가장 중요함 정수이기 때문에 하나만 넘기어 주면 시간과 공간을 절약함

필수

보통 N개로 이루어져 있으면 0~(N-1) 까지 정수로 이루어진 집합을 나타낼 때 사용
(1~N) 이면 공간이 2배 더 필요함

여러가지 연산

검사
어떤 수가 포함되어 있는지는 &연산을 사용
추가
추가연산의 경우 그 비트를 1로 바꾸어주면 된다 |연산 사용
제거
제거하고 싶은 비트만 0으로 만들고 &연산