1 알고리즘 알고리즘(Algorithm) (Algorithm) Divide and Conquer ( Divide and Conquer (분할정복 분할정복) 2010 2010년 봄학기 봄학기 강원대학교 강원대학교 컴퓨터과학전공 컴퓨터과학전공 문양세 문양세 Divide Divide-and and-Conquer? Conquer? 유래: • 1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략 • 오스트리아-러시아 연합군 > 프랑스군 (15,000명 이상 많음) Divide and Conquer 전체적인 전력은 연합군이 프랑스군에 비해 우수함 • 나폴레옹은 연합군의 중앙부로 쳐들어가 연합군을 둘로 나눔 Divide • 둘로 나뉜 연합군을 한 부분씩 정복(격파)함 Conquer Computer Algorithms by Yang-Sae Moon Page 2
38
Embed
알고리즘(Algorithm) Divide and Conquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2010_1/alg/05.pdf · 2016. 6. 2. · 3 강의강의순서순서 Divide and Conquer 이진검색(Binary
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
1
알고리즘알고리즘(Algorithm) (Algorithm) Divide and Conquer (Divide and Conquer (분할정복분할정복))
20102010년년 봄학기봄학기
강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세
DivideDivide--andand--Conquer?Conquer?
유래:
• 1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략
• 오스트리아-러시아 연합군 > 프랑스군 (15,000명 이상 많음)
Divide and Conquer
전체적인 전력은 연합군이 프랑스군에 비해 우수함
• 나폴레옹은 연합군의 중앙부로 쳐들어가 연합군을 둘로 나눔 Divide
• 둘로 나뉜 연합군을 한 부분씩 정복(격파)함 Conquer
Computer Algorithmsby Yang-Sae MoonPage 2
2
DivideDivide--andand--Conquer?Conquer?
유래:
• 1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략
• 오스트리아-러시아 연합군 > 프랑스군 (15,000명 이상 많음)
Divide and Conquer
전체적인 전력은 연합군이 프랑스군에 비해 우수함
• 나폴레옹은 연합군의 중앙부로 쳐들어가 연합군을 둘로 나눔 Divide
• 둘로 나뉜 연합군을 한 부분씩 정복(격파)함 Conquer
Computer Algorithmsby Yang-Sae MoonPage 3
DivideDivide--andand--Conquer Conquer 설계설계 전략전략Divide and Conquer
분할(Divide): 해결하기 쉽도록 문제를 여러 개의 작은 부분으로
나눈다.
정복(Conquer): 나눈 작은 문제를 각각 해결한다.
통합(Combine): (필요하다면) 해결된 해답을 모은다.
이러한 문제 해결 방법을 하향식(top-down) 접근방법이라고 한다.
Computer Algorithmsby Yang-Sae MoonPage 4
3
강의강의 순서순서Divide and Conquer
이진검색 (Binary Search)
합병정렬 (Merge Sort)합병정렬 (Merge Sort)
The Master Theorem
빠른정렬 (Quick Sort)
Computer Algorithmsby Yang-Sae MoonPage 5
행렬곱셈 (Matrix Multiplication)
이진이진 검색검색: : 재귀재귀 알고리즘알고리즘 (1/3)(1/3)
문제: 크기가 n인 정렬된 배열 S에 x가 있는지를 결정하라.
입력: 자연수 n, 정렬된 배열 S[1..n], 찾고자 하는 항목 x
출력: locationout - x가 S의 어디에 있는지의 위치,
Divide and Conquer
출력: locationout x가 S의 어디에 있는지의 위치, 만약 x가 S에 없다면 0
설계전략:
• x가배열의 중간에 위치한항목과 같으면, “빙고, 찾았다!” 그렇지않으면:
• 분할: 배열을반으로 나누어서 x가중앙에 위치한항목보다 작으면왼쪽에 위치
한 배열 반쪽을선택하고, 그렇지 않으면 오른쪽에 위치한 배열 반쪽을 선택한다.
Computer Algorithmsby Yang-Sae MoonPage 6
• 정복: 선택된반쪽 배열에서 x를찾는다.
• 통합: (필요없음)
4
이진이진 검색검색: : 재귀재귀 알고리즘알고리즘 (2/3)(2/3)Divide and Conquer
index location (index low, index high) {index mid;
• Induction hypothesis: n > 1이고, 1 < k < n인모든 k에대해서,
가성립한다고가정한다.
lg 1 lg 1 1 0 1 1 (1)n W
( ) lg 1W k k
Computer Algorithmsby Yang-Sae MoonPage 15
• Induction step:
1) n이짝수이면 (즉, ), 다음이성립한다.
Divide and Conquer
2 2n n
이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (6/7)(6/7)
2
2
2
2
( ) 1 ( )
1 lg 1
2 lg
2 lg
2 l 1
n
n
n
n
W n W
n
점화식에 의해서
귀납가정에의해서
이짝수이므로
Computer Algorithmsby Yang-Sae MoonPage 16
2 lg 1
2 lg 1
1 lg
n
n
n
9
• Induction step:
2) n이홀수이면 (즉, ), 다음이성립한다.
Divide and Conquer
12 2n n
( ) 1 ( ) nW n W 재현식에의해서
이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (7/7)(7/7)
2
2
2
12
( ) 1 ( )
1 lg 1
2 lg
2 lg
2 lg( 1) 1
2 lg( 1) 1
n
n
n
W n W
n
n
n
재현식에의해서
귀납가정에의해서
이 홀수이므로
Computer Algorithmsby Yang-Sae MoonPage 17
2 lg( 1) 1
1 lg( 1)
1 lg
n
n
n n
이 홀수이므로
( ) lg 1 (lg )W n n n 따라서, 모든 n에 대해서 이 성립한다.
강의강의 순서순서Divide and Conquer
이진검색 (Binary Search)
합병정렬 (Merge Sort)합병정렬 (Merge Sort)
The Master Theorem
빠른정렬 (Quick Sort)
Computer Algorithmsby Yang-Sae MoonPage 18
행렬곱셈 (Matrix Multiplication)
10
합병정렬합병정렬(Merge Sort) (1/2)(Merge Sort) (1/2)
문제: n개의 정수를 (비내림차순으로) 정렬하시오.
입력: 정수 n, 크기가 n인 배열 S[1..n]
Divide and Conquer
출력: (비내림차순으로) 정렬된 배열 S[1..n]
보기: 27, 10, 12, 20, 25, 13, 15, 22
다음 페이지 참조
Computer Algorithmsby Yang-Sae MoonPage 19
합병정렬합병정렬 (2/2)(2/2)Divide and Conquer
Computer Algorithmsby Yang-Sae MoonPage 20
11
합병정렬합병정렬: : 알고리즘알고리즘Divide and Conquer
void mergesort (int n, keytype S[])
{
const int h = n/2, m = n - h;,
keytype U[1..h], V[1..m];
if (n > 1) {
copy S[1] through S[h] to U[1] through U[h];
copy S[h+1] through S[n] to V[1] through V[m];
mergesort(h,U);
Computer Algorithmsby Yang-Sae MoonPage 21
mergesort(m,V);
merge(h,m,U,V,S);
}
}
합병정렬합병정렬: : 합병합병Divide and Conquer
문제: 두 개의 정렬된 배열을 하나의 정렬된 배열로 합병하시오.
입력: (1) 양의 정수 h, m, (2) 정렬된 배열 U[1..h], V[1..m]
출력: U와 V에 있는 키들을 하나의 배열에 정렬한 S[1..h+m]
Computer Algorithmsby Yang-Sae MoonPage 22
12
합병정렬합병정렬: : 합병합병 알고리즘알고리즘 (1/2)(1/2)Divide and Conquer
void merge(int h, int m, const keytype U[], const keytype V[], keytype S[])
{index i, j, k;, j,i = 1; j = 1; k = 1;while (i <= h && j <= m) {
if (U[i] < V[j]) {S[k] = U[i];i++;
} else {S[k] = V[j];j++;
}
Computer Algorithmsby Yang-Sae MoonPage 23
}k++;
}if(i > h) copy V[j] through V[m] to S[k] through S[h+m];else copy U[i] through U[h] to S[k] through S[h+m];
}
합병정렬합병정렬: : 합병합병 알고리즘알고리즘 (2/2)(2/2)Divide and Conquer
최악의경우시간복잡도분석
단위연산: U[i]와 V[j]의 비교
입력크기: 2개의 입력 배열에 각각 들어 있는 항목의 개수: h, m
분석:
• i = h이고, j = m – 1인 상태로루프(loop)에서 빠져나가는 것이최악의 경우임
• 예를들어, V에 있는 처음 m - 1개의 항목이 S의 앞부분에위치하고, U에 있는 h개의모든 항목이 그뒤에 위치하는경우임
Computer Algorithmsby Yang-Sae MoonPage 24
• 이때, 단위연산의 실행 횟수는 h + m – 1이다.
• 따라서, 최악의경우 합병하는 시간복잡도는W(h,m) = h + m – 1.
13
합병정렬합병정렬: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (1/2)(1/2)Divide and Conquer
단위연산: 합병 알고리즘 merge에서 발생하는 비교
입력크기: 배열 S에 들어 있는 항목의 개수 n
분석: 분석:
• 최악의경우 수행시간은W(h,m) = W(h) + W(m) + h + m - 1이된다.
• 여기서W(h)는 U를정렬하는데걸리는 시간, W(m)은 V를 정렬하는데걸리는 시
간, 그리고 h + m - 1은합병하는데 걸리는시간이다.
• 정수 n을 2k(k 1)이라고 가정하면, h = m = n/2 이 된다.
• 따라서최악의 경우 점화식은다음와 같다.
Computer Algorithmsby Yang-Sae MoonPage 25
• 이점화식의 해는 다음에소개할 Master Theorem을 적용하면, 다음과같다.
2( ) 2 ( ) 1 1, 2 ( 1)
(1) 0
knW n W n n n k
W
( ) ( lg )W n n n
합병정렬합병정렬: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (2/2)(2/2)Divide and Conquer
n이 2의 거듭제곱(power)의 형태가 아닌 경우의 점화식은 다음과
같다.
2 2( ) ( ) ( ) 1 1n nW n W W n n
그러나, 이 점화식의 정확한 해를 구하기는 복잡하다.
그런데, 앞의 이진검색 알고리즘의 분석에서도 보았듯이, n = 2k라
고가정해서 해를 구하면, 이 점화식의 해와 같은 카테고리의 시간
2 2( ) ( ) ( )
(1) 0W
Computer Algorithmsby Yang-Sae MoonPage 26
복잡도를 얻게 된다.
따라서 앞으로 이와 비슷한 점화식의 해를 구할 때, n = 2k라고 가정
해서구해도 점근적으로는 같은 해를 얻게 된다.
14
합병정렬합병정렬: : 공간공간 복잡도복잡도 (1/3)(1/3)Divide and Conquer
입력을저장하는데필요한저장장소이외에추가적인저장장소를
사용하지않고정렬하는알고리즘을제자리정렬(in-place sort) 알고리즘
이라고한다.
앞서의합병정렬알고리즘은제자리정렬알고리즘이아니다.
왜냐하면입력인배열 S이외에두 개의배열 U와 V를 추가로만들어서사
용하기때문이다.
Computer Algorithmsby Yang-Sae MoonPage 27
합병정렬합병정렬: : 공간공간 복잡도복잡도 (2/4)(2/4)Divide and Conquer
그러면합병정렬은얼마만큼의추가적인저장장소가필요할까?
• 함수 mergesort를 호출할때마다 크기가 S의 반이 되는 U와 V가 추가적으로 필
요하다.
• 함수 merge에서는 U와 V가 주소로전달이 되어그냥 사용되므로추가적인 저장
장소를만들지 않는다.
• 따라서, mergesort를 재귀호출할 때마다얼마만큼의 추가적인저장장소가 만들
어져야하는지를 계산해 보면된다.
• 처음 S의 크기가 n이면, 추가적으로 필요한 U와 V의 저장장소 크기의합은 n이된다. 다음재귀 호출에는 n/2, 그 다음에는 n/4 등으로추가적인 저장장소가필
요하다
Computer Algorithmsby Yang-Sae MoonPage 28
요하다.
• 이들저장장소의 크기를 합하면, 이된다. (다음페이지 참조)
• 결론적으로합병정렬 알고리즘의 공간복잡도는 이라 할수 있다.
22 4n n
n n
2n n
15
합병정렬합병정렬: : 공간공간 복잡도복잡도 (3/4)(3/4)Divide and Conquer
Computer Algorithmsby Yang-Sae MoonPage 29
합병정렬합병정렬: : 공간공간 복잡도복잡도 (4/4)(4/4)Divide and Conquer
추가적으로필요한저장장소가 n이되도록, 즉, 공간복잡도가 n이되도록
알고리즘을향상시킬수 있다(다음절의알고리즘).
그러나, 합병정렬알고리즘이 (공간복잡도가 O(1))인제자리정렬알고리그러나, 합병정렬알고리즘이 (공간복잡도가 O(1))인제자리정렬알고리
즘이될수는없다.
Computer Algorithmsby Yang-Sae MoonPage 30
16
합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (1/3)(1/3)Divide and Conquer
문제: n개의 정수를 (비내림차순으로) 정렬하시오.
입력: 정수 n, 크기가 n인 배열 S[1..n]
출력: (비내림차순으로) 정렬된 배열 S[1..n]( ) [ ]
void mergesort2 (index low, index high)
{
index mid;
if (low < high) {
mid = (low + high) / 2;
mergesort2(low, mid);
mergesort2(mid+1, high);
Computer Algorithmsby Yang-Sae MoonPage 31
merge2(low, mid, high);
}
}
...
mergesort2(1, n);
...
합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (2/3)(2/3)Divide and Conquer
합병(Merge)
• 문제: 두개의정렬된배열을하나의정렬된배열로합병하시오.
입력 (1) 첨자 l id hi h (2) 부분배열 S[l hi h]• 입력: (1) 첨자 low, mid, high, (2) 부분배열 S[low..high]
(단, S[low..mid]와 S[mid+1..high]는이미각각정렬이완료되어있음)
• 출력: 정렬이완료된부분배열 S[1..high]
Computer Algorithmsby Yang-Sae MoonPage 32
17
합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (3/3)(3/3)Divide and Conquer
void merge2(index low, index mid, index high){
index i, j, k;keytype U[low..high]; // 합병하는데 필요한 지역 배열
i l j id + 1 k li = low; j = mid + 1; k = low;while (i <= mid && j <= high) {
if (S[i] < S[j]) {U[k] = S[i];i++;
} else {U[k] = S[j];j++;
}
merge2() 함수는 어느 한 순간에 하나만
호출된다. 재귀 호출이 아님에 유의한다.
Computer Algorithmsby Yang-Sae MoonPage 33
k++;}if(i > mid) copy S[j] through S[high] to U[k] through U[high];else copy S[i] through S[mid] to U[k] through U[high];copy U[low] through U[high] to S[low] through S[high];
}
강의강의 순서순서Divide and Conquer
이진검색 (Binary Search)
합병정렬 (Merge Sort)합병정렬 (Merge Sort)
The Master Theorem
빠른정렬 (Quick Sort)
Computer Algorithmsby Yang-Sae MoonPage 34
행렬곱셈 (Matrix Multiplication)
18
The Master TheoremThe Master Theorem
Consider a function f(n) that, for all n=bk for all kZ+,
satisfies the recurrence relation: (n=bk 일 때, 다음 점화 관계가 성립하면)