By	POSTECH	Computer	Algorithm	Team
DP 최적화 기법
임병찬
DP Optimization
Contents
POSTECH Computer Algorithm Team
Convex Hull Trick 1
Optimization 0
Divide and Conquer 2
Knuth Optimization 3
POSTECH Computer Algorithm Team
- 좋은 알고리즘이란 무엇일까?
- 문제의 답을 내면서,	빠르게 답을 내야 한다.
- 빠른 알고리즘을 만들려면 어떻게 해야할까?
- 연산을 최대한 줄여야 한다.
- 연산을 줄이려면 어떻게 해야 할까?
Optimization Optimization
POSTECH Computer Algorithm Team
Optimization
- 문제의 숨어있는 조건을 잘 살펴봐야 한다.
- 문제의 조건은 규칙을 만들고,	규칙은 문제 공간을 줄인다.
- DP는 모든 문제 공간을 특수한 규칙에 의해 채워나가는 method다.
ex)	오름차순,	내림차순,	값이 작은 것부터 등등
- 따라서,	문제 공간을 최대한 줄이는 것이 DP를 빠르게 구하는데 필요하다.
- 이를 DP	Optimization이라고 한다.
POSTECH Computer Algorithm Team
Optimization
- 다음과 같은 DP를 생각해보자.
𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖]
- DP와 a이외의 다른 memory는 없다고 가정한다.
- DP[n]을 구하는데 시간 O(n^2)이다.
Q)	만약 a[i]가 항상 0이상이라면?
POSTECH Computer Algorithm Team
Optimization
- 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎 𝑖
- 𝐷𝑃 𝑖 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1
- 𝐷𝑃 𝑖 − 1 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2
- max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 = 𝐷𝑃[𝑖 − 1]
- 𝐷𝑃 𝑖 = 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖]
따라서, a[i]가 0이상이라는 조건이 있다면 이 DP를 O(n)으로 구할 수 있다.
POSTECH Computer Algorithm Team
Optimization
예제)	다음과 같은 DP를 생각해 보자.
𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖]
a[i]가 -1이상이라는 조건이 있다면 어떻게 될까?
POSTECH Computer Algorithm Team
Optimization
- 𝐷𝑃 𝑖 − 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 − 1 혹은 𝐷𝑃 𝑖 − 1 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2
- 위의 경우, 𝐷𝑃 𝑖 − 1 + 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2
- 𝐷𝑃 𝑖 = 𝐷𝑃 𝑖 − 1 + 1 + 𝑎[𝑖]
POSTECH Computer Algorithm Team
Optimization
유명한 DP	Optimization들
- Convex	Hull	Trick
- Divide	and	Conquer	Optimization
- Knuth	Optimization
POSTECH Computer Algorithm Team
- Convex	Hull이란?	볼록다각형의 둘레를 생각하면 된다.
- n개의 점을 둘러싸도록 고무줄을 놓고 놓았을 때,	고무줄의 모양이 Convex	Hull이다.
- Convex	Hull	Trick과 Convex	Hull은 관계 없다(?)
Convex Hull Trick Convex Hull Trick
POSTECH Computer Algorithm Team
Convex Hull Trick
- 다음과 같은 DP를 생각하자.
𝐷𝑃 𝑖 = min
567
𝑏 𝑗 ∗ 𝑎 𝑖 + 𝐷𝑃[𝑗]
- 이때,	다음 조건이 주어져 있다.
b 𝑖 ≥ 𝑏 𝑖 + 1 𝑓𝑜𝑟 𝑎𝑙𝑙 𝑖
- 어떻게 Optimize	할까?
POSTECH Computer Algorithm Team
Convex Hull Trick
- 모든 식은 b[j]	*	a[i]	+	DP[j]꼴을 하고 있다.
- a[i]는 고정된 값이다.	왜냐하면,	i가 고정되어 있으니까.
- b[j]	*	x	+	DP[j]도 고정된 값이다.	
- 왜냐하면,	b[1]과 DP[1],	b[2]와 DP[2],...는 항상 짝을 이뤄서 계산되기 때문이다.	
(b[1]과 DP[2]가 같이 연산 되는 경우가 있는가?)
- b[j]	*	x	+	DP[j]는 일차 함수 형식을 띄고 있다.	그러므로,	line을 관리하는 Data	Structure를 생각해 보자.
POSTECH Computer Algorithm Team
Convex Hull Trick
- 일차함수 f1,f2,...fk가 있는 Set을 생각해 보자.
- fi의 기울기는 fi+1의 기울기보다 작다.
- 따라서,	Set의 모양은 다음과 같이 된다.(예시)
f1
f2
f3
f4
POSTECH Computer Algorithm Team
Convex Hull Trick
- 우리가 구하려는 값은 f1(a[i]),	f2(a[i]),...들의 min이다.
- 따라서,	우리는 이 Segment만 알면 바로 답을 구할 수 있다.
- 이 Segment가 Convex	Hull을 닮아서 Convex	Hull	Trick이라 부른다.
f1
f2
f3
f4
POSTECH Computer Algorithm Team
Convex Hull Trick
- 만약 S	=	f1,f2,...,fn가 segment를 이루는 Line들의 집합이라고 하자.
- Segment	모양에 의해,	fi의 기울기는 fi+1의 기울기보다 작다.
- 새로운 Line	g가 insert	되었다고 가정하자.
- 문제 조건에 의해,	g의 기울기는 fn보다 작다.
- 따라서,	새로운 S는 f1,	f2,	...,	fm,	g가 될 것이다.(m<=n)
POSTECH Computer Algorithm Team
Convex Hull Trick
- g와 fn-1의 교점 A와 fn과 fn-1의 교점 B를 생각하자.
- B가 A보다 오른쪽에 있다면,	fn은 g에 가려졌다는 의미가 된다.
- 즉,	fn은 S에서 erase된다.
fn-2
fn-1
fn
g
B
A
POSTECH Computer Algorithm Team
Convex Hull Trick
- g가 insert가 되면,	fn과 비교한다.	fn이 erase되면,	다시 fn-1과 비교한다.	...
- insert	한번에 O(n)	하지만,	모든 Line은 S에 최대 1번 insert되고,	최대 1번 erase되므로,
- n번의 insert	연산을 하는데 드는 시간 O(n)
POSTECH Computer Algorithm Team
Convex Hull Trick
- Segment	S =	f1,f2,...,fn이 주어져 있다고 하자.
- min(f1(a[i]),f2(a[i]),...)를 어떻게 구할까?
- Binary	Search로 O(logn)만에 가능하다.	총 n번의 search가 있으므로,	전체 O(nlogn)
Q1)	어떻게 Binary	Search를 하는가?
Q2)	만약 a[i]	<=	a[i+1]이라는 조건이 추가로 주어지면 n번의 search를 O(n)만에 할 수 있다.	어떻게 할까?
POSTECH Computer Algorithm Team
- 다음과 같은 DP를 생각하자.
𝐷𝑃 𝑖 [𝑗] = min
?65
𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗]
- 다음을 정의하자.
𝑜𝑝𝑡 𝑖 𝑗 ≔ 𝐷𝑃 𝑖 𝑗 = 𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗]가 되게 하는 k
- 다음 조건이 주어져 있다고 하자.
𝑜𝑝𝑡 𝑖 [𝑗] ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1]
Divide and Conquer Divide and Conquer
POSTECH Computer Algorithm Team
Divide and Conquer
- DP[i][n/2]를 계산해보자.	그러면,	opt[i][n/2]를 계산할 수 있다.
- DP[i][j]	(j<n/2)를 계산하려면 k를 1에서 opt[i][n/2]까지만 보면 된다.
- DP[i][j]	(j>n/2)를 계산하려면 k를 opt[i][n/2]에서 n까지만 보면 된다.
- 따라서,	DP[i][1,2,...,n]을 Divide	and	Conquer로 O(nlogn)만에 구할 수 있다.
- 그러므로 모든 DP를 O(n^2logn)만에 구할 수 있다.
Q)	opt[i][j]<=opt[i][j+1]을 어떻게 알 수 있는가?
POSTECH Computer Algorithm Team
Divide and Conquer
다음 두 조건을 모두 만족할 때,	opt[i][j]	<=	opt[i][j+1]이 성립한다.
1)	Quadrangle	Inequality:	C[a][c]+C[b][d]	<=	C[a][d]+C[b][c]	if	a<=b<=c<=d
2)	Monotonicity:	C[b][c]	<=	C[a][d]	if	a<=b<=c<=d
POSTECH Computer Algorithm Team
- 다음과 같은 DP가 있다.
𝐷𝑃 𝑖 𝑗 = min
76?65
𝐷𝑃 𝑖 𝑘 + 𝐷𝑃 𝑘 𝑗 + 𝐶 𝑖 [𝑗]
- 다음과 같은 성질이 있다고 하자.
𝑜𝑝𝑡 𝑖 − 1 𝑗 ≤ 𝑜𝑝𝑡 𝑖 𝑗 ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1]
Knuth Optimization Knuth Optimization
POSTECH Computer Algorithm Team
Knuth Optimization
- k를 i에서 j까지 보는 것을 opt[i-1][j]에서 opt[i][j+1]까지 보는 것으로 바꾸면 된다.
- 그러면,	O(n^3)	DP가 O(n^2)만에 풀린다는 것이 밝혀져 있다.
POSTECH Computer Algorithm Team
https://www.acmicpc.net/problem/13262
https://www.acmicpc.net/problem/7737
https://www.acmicpc.net/problem/6171
https://www.acmicpc.net/problem/13246
오늘의 문제
POSCAT
Thank you :-)

DP Optimization

  • 1.
  • 2.
    Contents POSTECH Computer AlgorithmTeam Convex Hull Trick 1 Optimization 0 Divide and Conquer 2 Knuth Optimization 3
  • 3.
    POSTECH Computer AlgorithmTeam - 좋은 알고리즘이란 무엇일까? - 문제의 답을 내면서, 빠르게 답을 내야 한다. - 빠른 알고리즘을 만들려면 어떻게 해야할까? - 연산을 최대한 줄여야 한다. - 연산을 줄이려면 어떻게 해야 할까? Optimization Optimization
  • 4.
    POSTECH Computer AlgorithmTeam Optimization - 문제의 숨어있는 조건을 잘 살펴봐야 한다. - 문제의 조건은 규칙을 만들고, 규칙은 문제 공간을 줄인다. - DP는 모든 문제 공간을 특수한 규칙에 의해 채워나가는 method다. ex) 오름차순, 내림차순, 값이 작은 것부터 등등 - 따라서, 문제 공간을 최대한 줄이는 것이 DP를 빠르게 구하는데 필요하다. - 이를 DP Optimization이라고 한다.
  • 5.
    POSTECH Computer AlgorithmTeam Optimization - 다음과 같은 DP를 생각해보자. 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖] - DP와 a이외의 다른 memory는 없다고 가정한다. - DP[n]을 구하는데 시간 O(n^2)이다. Q) 만약 a[i]가 항상 0이상이라면?
  • 6.
    POSTECH Computer AlgorithmTeam Optimization - 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎 𝑖 - 𝐷𝑃 𝑖 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 - 𝐷𝑃 𝑖 − 1 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 - max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 = 𝐷𝑃[𝑖 − 1] - 𝐷𝑃 𝑖 = 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖] 따라서, a[i]가 0이상이라는 조건이 있다면 이 DP를 O(n)으로 구할 수 있다.
  • 7.
    POSTECH Computer AlgorithmTeam Optimization 예제) 다음과 같은 DP를 생각해 보자. 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖] a[i]가 -1이상이라는 조건이 있다면 어떻게 될까?
  • 8.
    POSTECH Computer AlgorithmTeam Optimization - 𝐷𝑃 𝑖 − 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 − 1 혹은 𝐷𝑃 𝑖 − 1 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 - 위의 경우, 𝐷𝑃 𝑖 − 1 + 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 - 𝐷𝑃 𝑖 = 𝐷𝑃 𝑖 − 1 + 1 + 𝑎[𝑖]
  • 9.
    POSTECH Computer AlgorithmTeam Optimization 유명한 DP Optimization들 - Convex Hull Trick - Divide and Conquer Optimization - Knuth Optimization
  • 10.
    POSTECH Computer AlgorithmTeam - Convex Hull이란? 볼록다각형의 둘레를 생각하면 된다. - n개의 점을 둘러싸도록 고무줄을 놓고 놓았을 때, 고무줄의 모양이 Convex Hull이다. - Convex Hull Trick과 Convex Hull은 관계 없다(?) Convex Hull Trick Convex Hull Trick
  • 11.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - 다음과 같은 DP를 생각하자. 𝐷𝑃 𝑖 = min 567 𝑏 𝑗 ∗ 𝑎 𝑖 + 𝐷𝑃[𝑗] - 이때, 다음 조건이 주어져 있다. b 𝑖 ≥ 𝑏 𝑖 + 1 𝑓𝑜𝑟 𝑎𝑙𝑙 𝑖 - 어떻게 Optimize 할까?
  • 12.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - 모든 식은 b[j] * a[i] + DP[j]꼴을 하고 있다. - a[i]는 고정된 값이다. 왜냐하면, i가 고정되어 있으니까. - b[j] * x + DP[j]도 고정된 값이다. - 왜냐하면, b[1]과 DP[1], b[2]와 DP[2],...는 항상 짝을 이뤄서 계산되기 때문이다. (b[1]과 DP[2]가 같이 연산 되는 경우가 있는가?) - b[j] * x + DP[j]는 일차 함수 형식을 띄고 있다. 그러므로, line을 관리하는 Data Structure를 생각해 보자.
  • 13.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - 일차함수 f1,f2,...fk가 있는 Set을 생각해 보자. - fi의 기울기는 fi+1의 기울기보다 작다. - 따라서, Set의 모양은 다음과 같이 된다.(예시) f1 f2 f3 f4
  • 14.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - 우리가 구하려는 값은 f1(a[i]), f2(a[i]),...들의 min이다. - 따라서, 우리는 이 Segment만 알면 바로 답을 구할 수 있다. - 이 Segment가 Convex Hull을 닮아서 Convex Hull Trick이라 부른다. f1 f2 f3 f4
  • 15.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - 만약 S = f1,f2,...,fn가 segment를 이루는 Line들의 집합이라고 하자. - Segment 모양에 의해, fi의 기울기는 fi+1의 기울기보다 작다. - 새로운 Line g가 insert 되었다고 가정하자. - 문제 조건에 의해, g의 기울기는 fn보다 작다. - 따라서, 새로운 S는 f1, f2, ..., fm, g가 될 것이다.(m<=n)
  • 16.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - g와 fn-1의 교점 A와 fn과 fn-1의 교점 B를 생각하자. - B가 A보다 오른쪽에 있다면, fn은 g에 가려졌다는 의미가 된다. - 즉, fn은 S에서 erase된다. fn-2 fn-1 fn g B A
  • 17.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - g가 insert가 되면, fn과 비교한다. fn이 erase되면, 다시 fn-1과 비교한다. ... - insert 한번에 O(n) 하지만, 모든 Line은 S에 최대 1번 insert되고, 최대 1번 erase되므로, - n번의 insert 연산을 하는데 드는 시간 O(n)
  • 18.
    POSTECH Computer AlgorithmTeam Convex Hull Trick - Segment S = f1,f2,...,fn이 주어져 있다고 하자. - min(f1(a[i]),f2(a[i]),...)를 어떻게 구할까? - Binary Search로 O(logn)만에 가능하다. 총 n번의 search가 있으므로, 전체 O(nlogn) Q1) 어떻게 Binary Search를 하는가? Q2) 만약 a[i] <= a[i+1]이라는 조건이 추가로 주어지면 n번의 search를 O(n)만에 할 수 있다. 어떻게 할까?
  • 19.
    POSTECH Computer AlgorithmTeam - 다음과 같은 DP를 생각하자. 𝐷𝑃 𝑖 [𝑗] = min ?65 𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗] - 다음을 정의하자. 𝑜𝑝𝑡 𝑖 𝑗 ≔ 𝐷𝑃 𝑖 𝑗 = 𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗]가 되게 하는 k - 다음 조건이 주어져 있다고 하자. 𝑜𝑝𝑡 𝑖 [𝑗] ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1] Divide and Conquer Divide and Conquer
  • 20.
    POSTECH Computer AlgorithmTeam Divide and Conquer - DP[i][n/2]를 계산해보자. 그러면, opt[i][n/2]를 계산할 수 있다. - DP[i][j] (j<n/2)를 계산하려면 k를 1에서 opt[i][n/2]까지만 보면 된다. - DP[i][j] (j>n/2)를 계산하려면 k를 opt[i][n/2]에서 n까지만 보면 된다. - 따라서, DP[i][1,2,...,n]을 Divide and Conquer로 O(nlogn)만에 구할 수 있다. - 그러므로 모든 DP를 O(n^2logn)만에 구할 수 있다. Q) opt[i][j]<=opt[i][j+1]을 어떻게 알 수 있는가?
  • 21.
    POSTECH Computer AlgorithmTeam Divide and Conquer 다음 두 조건을 모두 만족할 때, opt[i][j] <= opt[i][j+1]이 성립한다. 1) Quadrangle Inequality: C[a][c]+C[b][d] <= C[a][d]+C[b][c] if a<=b<=c<=d 2) Monotonicity: C[b][c] <= C[a][d] if a<=b<=c<=d
  • 22.
    POSTECH Computer AlgorithmTeam - 다음과 같은 DP가 있다. 𝐷𝑃 𝑖 𝑗 = min 76?65 𝐷𝑃 𝑖 𝑘 + 𝐷𝑃 𝑘 𝑗 + 𝐶 𝑖 [𝑗] - 다음과 같은 성질이 있다고 하자. 𝑜𝑝𝑡 𝑖 − 1 𝑗 ≤ 𝑜𝑝𝑡 𝑖 𝑗 ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1] Knuth Optimization Knuth Optimization
  • 23.
    POSTECH Computer AlgorithmTeam Knuth Optimization - k를 i에서 j까지 보는 것을 opt[i-1][j]에서 opt[i][j+1]까지 보는 것으로 바꾸면 된다. - 그러면, O(n^3) DP가 O(n^2)만에 풀린다는 것이 밝혀져 있다.
  • 24.
    POSTECH Computer AlgorithmTeam https://www.acmicpc.net/problem/13262 https://www.acmicpc.net/problem/7737 https://www.acmicpc.net/problem/6171 https://www.acmicpc.net/problem/13246 오늘의 문제
  • 25.