본문으로 건너뛰기
김신건의 로그

DP Optimization: CHT, D&C, Knuth, SMAWK

· 수정 · 📖 약 1분 · 261자/단어 #algorithm #dp #optimization
DP Optimization, DP 최적화, DP optimization tricks

정의

일반 DP 를 O(N²) 또는 O(N³) 에서 O(N log N) 또는 O(N) 으로 낮추는 여러 최적화 기법의 총칭입니다. 모두 특정 조건 (monotone, concave, quadrangle inequality) 이 성립할 때만 적용 가능.

대표 4 종

1. Convex Hull Trick (CHT)

선형 함수 min/max 를 유지하는 자료구조. dp[i] = min(a[j]·x + b[j]) 형태에 적용.

  • Li-Chao Tree: 임의 삽입 순서
  • Kinetic: 온라인
  • 모노톤 CHT: 기울기 정렬된 경우 O(1) push

전용 Li-Chao Tree 참조.

2. Divide-and-Conquer Optimization

dp[i][j] = min(dp[i-1][k] + cost(k, j)) 에서 최적 k 가 j 에 대해 단조 증가 하면 O(N²) → O(N log N).

function<void(int, int, int, int)> solve = [&](int lo, int hi, int optl, int optr) {
    if (lo > hi) return;
    int mid = (lo + hi) / 2;
    int best_k = optl;
    dp[mid] = LLONG_MAX;
    for (int k = optl; k <= min(mid, optr); k++) {
        long long cand = prev[k] + cost(k, mid);
        if (cand < dp[mid]) { dp[mid] = cand; best_k = k; }
    }
    solve(lo, mid - 1, optl, best_k);
    solve(mid + 1, hi, best_k, optr);
};

3. Knuth Optimization

dp[i][j] = min(dp[i][k] + dp[k][j]) + w(i, j) 형태. Quadrangle inequality + monotone 이면 O(N³) → O(N²).

행렬 곱셈 순서, 최적 이진 검색 트리, LP 등.

4. SMAWK / Monge

Monge 행렬 (모든 2×2 부분행렬이 QI 만족) 위 행별 최솟값을 O(N) 에 계산.

참고

이 글의 용어 (3개)
리차오 트리 (Li Chao Tree)algorithm
정의 리차오 트리 (Li Chao Tree) 는 평면 상의 직선 (또는 선분) 집합에서 특정 x좌표에서의 최댓값 (또는 최솟값) 을 O(log N) 에 구하는 자료구조. 세그먼트…
배낭 문제 (Knapsack)algorithm
정의 배낭 문제 (Knapsack Problem) 은 무게 제한 W 인 배낭에 가치 vi, 무게 wi 인 물건 N 개 중 일부를 담아 총 가치 최대화하는 조합 최적화 문제. NP…
비트마스크 DP (Bitmask DP)algorithm
정의 비트마스크 DP (Bitmask DP) 는 상태 공간이 부분집합 으로 표현될 때, 각 부분집합을 정수의 비트로 인코딩해 DP 상태로 삼는 기법. N ≤ 20 범위에서 O(2…

이 개념을 다룬 위키 페이지 (1)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기