SlideShare a Scribd company logo
1 of 25
Download to read offline
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 :-)

More Related Content

What's hot

세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 WinterSuhyun Park
 
String algorithm
String algorithmString algorithm
String algorithm승혁 조
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceJae-yeol Lee
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이NAVER D2
 
Effective Python, Clean Code
Effective Python, Clean CodeEffective Python, Clean Code
Effective Python, Clean CodeJinHwan2
 
Insert Sort Algorithm (삽입 정렬 알고리즘)
Insert Sort Algorithm (삽입 정렬 알고리즘)Insert Sort Algorithm (삽입 정렬 알고리즘)
Insert Sort Algorithm (삽입 정렬 알고리즘)Junyeong Choi
 
You can read go code
You can read go codeYou can read go code
You can read go codeHomin Lee
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘Taewoo Lee
 
Bubble Sort Algorithm (버블 정렬 알고리즘)
Bubble Sort Algorithm (버블 정렬 알고리즘)Bubble Sort Algorithm (버블 정렬 알고리즘)
Bubble Sort Algorithm (버블 정렬 알고리즘)Junyeong Choi
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfHo Jeong Im
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced partNAVER D2
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)ssusercdf17c
 

What's hot (20)

세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
세그먼트 트리 느리게 업데이트하기 - Sogang ICPC Team, 2020 Winter
 
MCMF
MCMFMCMF
MCMF
 
03. dp easy
03. dp easy03. dp easy
03. dp easy
 
String algorithm
String algorithmString algorithm
String algorithm
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
HI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute ForceHI-ARC PS 102 Brute Force
HI-ARC PS 102 Brute Force
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
 
Effective Python, Clean Code
Effective Python, Clean CodeEffective Python, Clean Code
Effective Python, Clean Code
 
Insert Sort Algorithm (삽입 정렬 알고리즘)
Insert Sort Algorithm (삽입 정렬 알고리즘)Insert Sort Algorithm (삽입 정렬 알고리즘)
Insert Sort Algorithm (삽입 정렬 알고리즘)
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
You can read go code
You can read go codeYou can read go code
You can read go code
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘
 
컴퓨터개론09
컴퓨터개론09컴퓨터개론09
컴퓨터개론09
 
Bubble Sort Algorithm (버블 정렬 알고리즘)
Bubble Sort Algorithm (버블 정렬 알고리즘)Bubble Sort Algorithm (버블 정렬 알고리즘)
Bubble Sort Algorithm (버블 정렬 알고리즘)
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
이산치1번
이산치1번이산치1번
이산치1번
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
 
머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)머신 러닝을 해보자 3장 (2022년 스터디)
머신 러닝을 해보자 3장 (2022년 스터디)
 
Network flow
Network flowNetwork flow
Network flow
 

Similar to DP Optimization

Sqrt(n) algorithm
Sqrt(n) algorithmSqrt(n) algorithm
Sqrt(n) algorithm승혁 조
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers승혁 조
 
03. segment tree
03. segment tree03. segment tree
03. segment tree승혁 조
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity승혁 조
 
05 divide and conquer
05 divide and conquer05 divide and conquer
05 divide and conquer승혁 조
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 HwpKimjeongmoo
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions현정 김
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)HYUNJEONG KIM
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdfkd19h
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02chl132435
 
Dynamic Programming : Step by Step
Dynamic Programming : Step by StepDynamic Programming : Step by Step
Dynamic Programming : Step by Step인서 박
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)fmbvbfhs
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 

Similar to DP Optimization (20)

01. dp hard
01. dp hard01. dp hard
01. dp hard
 
DP 중급 2
DP 중급 2DP 중급 2
DP 중급 2
 
Sqrt(n) algorithm
Sqrt(n) algorithmSqrt(n) algorithm
Sqrt(n) algorithm
 
2019 ppc answers
2019 ppc answers2019 ppc answers
2019 ppc answers
 
03. segment tree
03. segment tree03. segment tree
03. segment tree
 
Dp 1
Dp 1Dp 1
Dp 1
 
01. c and time complexity
01. c and time complexity01. c and time complexity
01. c and time complexity
 
05 divide and conquer
05 divide and conquer05 divide and conquer
05 divide and conquer
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
Project#2말의여행 Hwp
Project#2말의여행 HwpProject#2말의여행 Hwp
Project#2말의여행 Hwp
 
2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
분할정복
분할정복분할정복
분할정복
 
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
알고리즘 연합캠프 세미나 1-C (알고리즘 설계와 모델링 및 수학)
 
2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf2012 Ds B2 02 Pdf
2012 Ds B2 02 Pdf
 
2012 Ds B2 02
2012 Ds B2 022012 Ds B2 02
2012 Ds B2 02
 
자구2번
자구2번자구2번
자구2번
 
Dynamic Programming : Step by Step
Dynamic Programming : Step by StepDynamic Programming : Step by Step
Dynamic Programming : Step by Step
 
1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)1.자료구조와 알고리즘(강의자료)
1.자료구조와 알고리즘(강의자료)
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
자료구조02
자료구조02자료구조02
자료구조02
 

More from 승혁 조

RSS Live Slider
RSS Live SliderRSS Live Slider
RSS Live Slider승혁 조
 
Parallel binary search
Parallel binary searchParallel binary search
Parallel binary search승혁 조
 
Geometry Algorithms
Geometry AlgorithmsGeometry Algorithms
Geometry Algorithms승혁 조
 
Heavy light decomposition
Heavy light decompositionHeavy light decomposition
Heavy light decomposition승혁 조
 
Advanced segment tree
Advanced segment treeAdvanced segment tree
Advanced segment tree승혁 조
 
L-R network flow
L-R network flowL-R network flow
L-R network flow승혁 조
 
Tree algorithm
Tree algorithmTree algorithm
Tree algorithm승혁 조
 
05. network flow 2
05. network flow 205. network flow 2
05. network flow 2승혁 조
 
04. binary search
04. binary search04. binary search
04. binary search승혁 조
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree승혁 조
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 

More from 승혁 조 (15)

RSS Live Slider
RSS Live SliderRSS Live Slider
RSS Live Slider
 
Parallel binary search
Parallel binary searchParallel binary search
Parallel binary search
 
Geometry Algorithms
Geometry AlgorithmsGeometry Algorithms
Geometry Algorithms
 
FFT
FFTFFT
FFT
 
Heavy light decomposition
Heavy light decompositionHeavy light decomposition
Heavy light decomposition
 
Advanced segment tree
Advanced segment treeAdvanced segment tree
Advanced segment tree
 
L-R network flow
L-R network flowL-R network flow
L-R network flow
 
NIM game
NIM gameNIM game
NIM game
 
Tree algorithm
Tree algorithmTree algorithm
Tree algorithm
 
Number theory
Number theoryNumber theory
Number theory
 
06. sorting
06. sorting06. sorting
06. sorting
 
05. network flow 2
05. network flow 205. network flow 2
05. network flow 2
 
04. binary search
04. binary search04. binary search
04. binary search
 
02. binary search tree
02. binary search tree02. binary search tree
02. binary search tree
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 

DP Optimization

  • 2. Contents POSTECH Computer Algorithm Team Convex Hull Trick 1 Optimization 0 Divide and Conquer 2 Knuth Optimization 3
  • 3. POSTECH Computer Algorithm Team - 좋은 알고리즘이란 무엇일까? - 문제의 답을 내면서, 빠르게 답을 내야 한다. - 빠른 알고리즘을 만들려면 어떻게 해야할까? - 연산을 최대한 줄여야 한다. - 연산을 줄이려면 어떻게 해야 할까? Optimization Optimization
  • 4. POSTECH Computer Algorithm Team Optimization - 문제의 숨어있는 조건을 잘 살펴봐야 한다. - 문제의 조건은 규칙을 만들고, 규칙은 문제 공간을 줄인다. - DP는 모든 문제 공간을 특수한 규칙에 의해 채워나가는 method다. ex) 오름차순, 내림차순, 값이 작은 것부터 등등 - 따라서, 문제 공간을 최대한 줄이는 것이 DP를 빠르게 구하는데 필요하다. - 이를 DP Optimization이라고 한다.
  • 5. POSTECH Computer Algorithm Team Optimization - 다음과 같은 DP를 생각해보자. 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖] - DP와 a이외의 다른 memory는 없다고 가정한다. - DP[n]을 구하는데 시간 O(n^2)이다. Q) 만약 a[i]가 항상 0이상이라면?
  • 6. 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)으로 구할 수 있다.
  • 7. POSTECH Computer Algorithm Team Optimization 예제) 다음과 같은 DP를 생각해 보자. 𝐷𝑃 𝑖 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 1 + 𝑎[𝑖] a[i]가 -1이상이라는 조건이 있다면 어떻게 될까?
  • 8. POSTECH Computer Algorithm Team Optimization - 𝐷𝑃 𝑖 − 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 − 1 혹은 𝐷𝑃 𝑖 − 1 ≥ max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 - 위의 경우, 𝐷𝑃 𝑖 − 1 + 1 = max 𝐷𝑃 1 , 𝐷𝑃 2 , … , 𝐷𝑃 𝑖 − 2 - 𝐷𝑃 𝑖 = 𝐷𝑃 𝑖 − 1 + 1 + 𝑎[𝑖]
  • 9. POSTECH Computer Algorithm Team Optimization 유명한 DP Optimization들 - Convex Hull Trick - Divide and Conquer Optimization - Knuth Optimization
  • 10. POSTECH Computer Algorithm Team - Convex Hull이란? 볼록다각형의 둘레를 생각하면 된다. - n개의 점을 둘러싸도록 고무줄을 놓고 놓았을 때, 고무줄의 모양이 Convex Hull이다. - Convex Hull Trick과 Convex Hull은 관계 없다(?) Convex Hull Trick Convex Hull Trick
  • 11. POSTECH Computer Algorithm Team Convex Hull Trick - 다음과 같은 DP를 생각하자. 𝐷𝑃 𝑖 = min 567 𝑏 𝑗 ∗ 𝑎 𝑖 + 𝐷𝑃[𝑗] - 이때, 다음 조건이 주어져 있다. b 𝑖 ≥ 𝑏 𝑖 + 1 𝑓𝑜𝑟 𝑎𝑙𝑙 𝑖 - 어떻게 Optimize 할까?
  • 12. 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를 생각해 보자.
  • 13. POSTECH Computer Algorithm Team Convex Hull Trick - 일차함수 f1,f2,...fk가 있는 Set을 생각해 보자. - fi의 기울기는 fi+1의 기울기보다 작다. - 따라서, Set의 모양은 다음과 같이 된다.(예시) f1 f2 f3 f4
  • 14. 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
  • 15. 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)
  • 16. 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
  • 17. 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)
  • 18. 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)만에 할 수 있다. 어떻게 할까?
  • 19. POSTECH Computer Algorithm Team - 다음과 같은 DP를 생각하자. 𝐷𝑃 𝑖 [𝑗] = min ?65 𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗] - 다음을 정의하자. 𝑜𝑝𝑡 𝑖 𝑗 ≔ 𝐷𝑃 𝑖 𝑗 = 𝐷𝑃 𝑖 − 1 𝑘 + 𝐶 𝑘 [𝑗]가 되게 하는 k - 다음 조건이 주어져 있다고 하자. 𝑜𝑝𝑡 𝑖 [𝑗] ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1] Divide and Conquer Divide and Conquer
  • 20. 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]을 어떻게 알 수 있는가?
  • 21. 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
  • 22. POSTECH Computer Algorithm Team - 다음과 같은 DP가 있다. 𝐷𝑃 𝑖 𝑗 = min 76?65 𝐷𝑃 𝑖 𝑘 + 𝐷𝑃 𝑘 𝑗 + 𝐶 𝑖 [𝑗] - 다음과 같은 성질이 있다고 하자. 𝑜𝑝𝑡 𝑖 − 1 𝑗 ≤ 𝑜𝑝𝑡 𝑖 𝑗 ≤ 𝑜𝑝𝑡[𝑖][𝑗 + 1] Knuth Optimization Knuth Optimization
  • 23. POSTECH Computer Algorithm Team Knuth Optimization - k를 i에서 j까지 보는 것을 opt[i-1][j]에서 opt[i][j+1]까지 보는 것으로 바꾸면 된다. - 그러면, O(n^3) DP가 O(n^2)만에 풀린다는 것이 밝혀져 있다.
  • 24. 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 오늘의 문제