대상 DP
구간 병합형 DP
$$ dp[i][j] = \min_{i \le k < j}\big(dp[i][k] + dp[k+1][j]\big) + C(i,j) $$
는 최적 BST, 파일 합치기, 행렬 곱셈 순서 등에서 나온다. 정의대로 채우면 칸 \(O(n^2)\) × 분기 \(O(n)\) = \(O(n^3)\). 크누스 최적화는 비용 \(C\) 가 적절한 조건을 만족할 때 이를 \(O(n^2)\) 으로 줄인다.
두 가지 조건
\(C(i,j)\) 가 다음을 만족한다고 하자.
- 사각 부등식(QI): \(a\le b\le c\le d\) 에 대해
$$ C(a,c)+C(b,d) \le C(a,d)+C(b,c). $$ - 단조성(MON): \(a\le b\le c\le d\) 에 대해 \(C(b,c)\le C(a,d)\) (구간이 포함되면 비용이 작거나 같음).
이 두 조건이 있으면 \(dp\) 자체도 QI를 물려받고, 최적 분기점 \(opt[i][j]\) (= \(dp[i][j]\) 를 달성하는 \(k\)) 에 대해
$$ opt[i][j-1] \;\le\; opt[i][j] \;\le\; opt[i+1][j] $$
가 성립한다. 즉 각 칸의 최적 분기점은 그 위·왼쪽 칸의 최적점 사이에 갇힌다.
왜 \(O(n^2)\) 인가
길이 \(\ell = j-i\) 가 같은 칸들을 한 줄로 보면, 그 줄의 분기점 탐색 총량은
$$ \sum_i \big(opt[i+1][j] - opt[i][j-1] + 1\big) $$
이고, 인접 항의 상한·하한이 텔레스코핑으로 상쇄되어 줄 전체가 \(O(n)\) 이 된다. 줄이 \(n\) 개이므로 전체 \(O(n^2)\).
조건 검증
QI는 비용이 "구간 합"처럼 부분모듈러일 때 흔히 성립한다. 예를 들어 \(C(i,j) = \big(\sum_{t=i}^{j} w_t\big)\) 같은 누적 비용은 QI와 MON을 동시에 만족한다. 확신이 없다면 작은 입력에서 brute로 \(opt\) 단조성을 직접 확인하는 것이 안전하다.
다른 최적화와의 위치
| 최적화 | DP 형태 | 결과 |
|---|---|---|
| 크누스 | 구간 \(dp[i][j]\), 분기 \(i\le k |
\(O(n^3)\to O(n^2)\) |
| 분할 정복 | 층 \(dp[i][j]=\min_k dp[i-1][k]+C\) | 층당 \(O(n\log n)\) |
| CHT/Li Chao | 비용이 직선 | \(O(\log)\) 전이 |