acmicpcseminar5

10
ACM- ICPC 세미나 분할정복

Upload: yonsei

Post on 17-Jul-2015

712 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Acmicpcseminar5

ACM-ICPC 세미나

분할정복

Page 2: Acmicpcseminar5

분할정복

• 한 사람이 최대 1 만큼 일을 할 수 있다고 할 때 , 어떤 사람에게 64 만큼의 일이 있다면 이 일을 둘로 쪼개 32 씩 외주로 맡기면 된다 .

• 외주로 일을 받은 사람은 또 16 씩 쪼개서 외주로 맡긴다 .

• 최초의 한 사람 입장에서 봤을 때 이 일은 단순히 외주를 두번 맡겨서 끝난 일이다 .

Page 3: Acmicpcseminar5

분할정복 (cont)

• 합병정렬 (merge sort) 가 대표적인 분할정복의 예

• 합병정렬은 다음의 절차로 이루어진다 .

– 절반씩 나눠 각각을 정렬한 다음 전체를 정렬

• 이진트리 혹은 n 진트리로 상태가 완전히 독립될 수 있는 문제를 분할정복으로 풀 수 있다 .

Page 4: Acmicpcseminar5

ACM-ICPC 세미나

동적계획법

Page 5: Acmicpcseminar5

동적계획법

• 분할정복과 달리 문제가 서로 독립되게 나눠지지 않는 경우 사용

• 이미 계산된 부분 문제를 이용하여 다른 부분 문제를 완성

• 백트랙킹 처럼 지수로 증가하거나 분할정복처럼 로그로 증가하는 것이 아니라 변수의 개수에 따라 차수만 증가

• 테이블로 표현

Page 6: Acmicpcseminar5

동적계획법

• 테이블의 차수에 따라 1 차원 동적계획법 , 2 차원 동적계획법 , 3 차원 동적계획법 등으로 부름

• 테이블의 차수는 곧 배열의 차수가 됨

• 동적계획법을 발음하기 좋게 다이나믹이라고 부르기도 함

Page 7: Acmicpcseminar5

1 차원 다이나믹

• 최대 증가 부분 수열 문제

• 어떤 불규칙한 수열이 있을 때 가장 긴 증가 부분 수열을 뽑아내는 문제

• 즉 , 5 3 1 2 4 2 라는 수열이 있으면 1 2 4 가 답이 된다 .

• a[n]=max(a[i]+1)( i :1~n-1, d[i] < d[n] )

• 위와 같은 식을 점화식이라고 함

Page 8: Acmicpcseminar5

2 차원 다이나믹

• 최대 공통 문자열 문제 (LCS)

• 길이 i, j 인 두 문자열이 있을 때 , 첫 번째 문자열의 i 번째 문자와 두 번째 문자열의 j 번째 문자가 같다면 길이가 각각 i-1, j-1 일 때 공통 문자열 길이 + 1 이 된다 .

• a[i,j] = a[i-1,j-1]+1( if s1[i] == s2[j] )

• a[i,j] = max(a[i-1,j], a[i,j-1])( if s1[i] != s2[j] )

Page 9: Acmicpcseminar5

ACM-ICPC 세미나

연습 문제

Page 10: Acmicpcseminar5

연습문제

• UVA111

• UVA103

• UVA10450