Learning
토픽 50 / 66·확률적 자료구조

비트맵 (Bitmap)

비트맵 (Bitmap)

각 비트를 하나의 플래그 또는 상태로 사용하는 공간 효율적인 집합 표현 방식으로, 비트 연산을 통해 원소의 존재 여부를 빠르게 판단

목적: 공간 효율, 빠른 집합 연산, 플래그 관리, 메모리 최소화

특징: 비트 단위 저장, 비트 연산, 매우 작은 메모리, O(1) 접근

구성요소: 정수 배열 또는 비트 배열, 비트 연산(AND: 교집합, OR: 합집합, XOR: 대칭차집합, NOT: 여집합, SHIFT: 비트 이동)

연산

  • set(i): bitmap[i/32] |= (1 << (i%32)) - i번째 비트 1로 설정, O(1)
  • clear(i): bitmap[i/32] &= ~(1 << (i%32)) - i번째 비트 0으로, O(1)
  • test(i): bitmap[i/32] & (1 << (i%32)) - i번째 비트 확인, O(1)
  • flip(i): bitmap[i/32] ^= (1 << (i%32)) - i번째 비트 반전, O(1)

시간 복잡도: 모든 비트 연산 O(1)

공간 복잡도: O(n/8) 바이트 - 일반 배열의 1/8

장점: 매우 작은 메모리, 빠른 연산(O(1)), 비트 연산 효율, 캐시 효율

단점: 희소 집합에서 비효율, 순회 느림(O(n)), 크기 제한(미리 결정)

적용사례: 소수 판정(에라토스테네스의 체), 권한 플래그, 자원 할당, 네트워크 라우팅 테이블, 블룸 필터

비교: 비트맵(밀집/빠름/작음) vs 해시 셋(희소/유연/큼)

연관: 비트 연산, 집합, 에라토스테네스의 체, 블룸 필터