Learning
토픽 62 / 82

비트마스크 DP (Bitmask Dynamic Programming)

비트마스크 DP (Bitmask Dynamic Programming)

집합의 상태를 비트마스크로 표현하여 부분집합을 효율적으로 관리하는 동적 프로그래밍 기법으로, 원소 개수 N이 작을 때(보통 20 이하) 2^N 상태 공간 탐색

목적: 부분집합 상태 관리, 지수 시간 문제의 효율화, TSP 해결

특징: 비트로 집합 표현, 2^N 상태, O(N * 2^N) 또는 O(N^2 * 2^N), 메모이제이션

비트마스크 표현

  • 집합 {0, 2, 3} → 1101(2) = 13
  • i번째 원소 포함 여부: (mask >> i) & 1
  • i번째 원소 추가: mask | (1 << i)
  • i번째 원소 제거: mask & ~(1 << i)

대표 문제: TSP(외판원 문제)

  • dp[mask][i] = mask 집합의 도시를 방문하고 현재 i에 있을 때 최소 비용
  • 점화식: dp[mask][i] = min(dp[mask^(1<
  • 시간 복잡도: O(N^2 * 2^N)

부분집합 열거

  • 모든 부분집합: for(s=mask; s>0; s=(s-1)&mask)
  • 원소 하나씩: for(i=0; i

적용 조건: N ≤ 20 (2^20 ≈ 100만), 상태 전이 명확, 부분문제 중복

장점: 집합 연산 O(1), 상태 표현 간결, 완전 탐색보다 효율

단점: N 제한(20~25), 지수 복잡도, 메모리 사용

적용사례: TSP, 할당 문제, 해밀턴 경로, 게임 이론, 스케줄링

비교: 비트마스크DP(2^N/작은N) vs 완전탐색(N!/비효율) vs 근사알고리즘(다항/근사)

연관: DP, TSP, 비트 연산, 부분집합, 조합 최적화