75
알고리즘 알고리즘(Algorithm) (Algorithm) 알고리즘 알고리즘(Algorithm) (Algorithm) Divide and Conquer ( Divide and Conquer (분할정복 분할정복) 2011 2011년 봄학기 봄학기 강원대학교 강원대학교 컴퓨터과학전공 컴퓨터과학전공 문양세 문양세

알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

알고리즘알고리즘(Algorithm) (Algorithm) 알고리즘알고리즘(Algorithm) (Algorithm) Divide and Conquer (Divide and Conquer (분할정복분할정복))C q (C q (분할정복분할정복))

20112011년년 봄학기봄학기

강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세강원대학교강원대학교 컴퓨터과학전공컴퓨터과학전공 문양세문양세

Page 2: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

DivideDivide--andand--Conquer?Conquer?Divide and Conquer

유래:

• 1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략

• 오스트리아-러시아 연합군 > 프랑스군 (15,000명 이상 많음)전체적인 전력은 연합군이 프랑스군에 비해 우수함

• 나폴레옹은 연합군의 중앙부로 쳐들어가 연합군을 둘로 나눔 Divide

• 둘로 나뉜 연합군을 한 부분씩 정복(격파)함 Conquer

Computer Algorithmsby Yang-Sae MoonPage 2

Page 3: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

DivideDivide--andand--Conquer?Conquer?Divide and Conquer

유래:

• 1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략1805년 12월 2일 아우스터리츠 전투에서 나폴레옹이 사용한 전략

• 오스트리아-러시아 연합군 > 프랑스군 (15,000명 이상 많음)전체적인 전력은 연합군이 프랑스군에 비해 우수함

• 나폴레옹은 연합군의 중앙부로 쳐들어가 연합군을 둘로 나눔 Divide

• 둘로 나뉜 연합군을 한 부분씩 정복(격파)함 Conquer

Computer Algorithmsby Yang-Sae MoonPage 3

Page 4: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

DivideDivide--andand--Conquer Conquer 설계설계 전략전략Divide and Conquer

분할(Divide): 해결하기쉽도록문제를여러개의작은부분으로

나눈다.나눈다

정복(Conquer): 나눈작은문제를각각해결한다.

통합(C bi ) (필요하다면) 해결된해답을모은다통합(Combine): (필요하다면) 해결된해답을모은다.

이러한문제해결방법을하향식(top-down) 접근방법이라고한다.

Computer Algorithmsby Yang-Sae MoonPage 4

Page 5: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

강의강의 순서순서Divide and Conquer

이진검색 (Binary Search)

합병정렬 (Merge Sort)

The Master Theorem

빠른정렬 (Quick Sort)

행렬곱셈 (Matrix Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 5

Page 6: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

이진이진 검색검색: : 재귀재귀 알고리즘알고리즘 (1/3)(1/3)Divide and Conquer

문제: 크기가 n인 정렬된배열 S에 x가있는지를결정하라.

입력: 자연수 n 정렬된배열 S[1 n] 찾고자하는항목 x입력: 자연수 n, 정렬된배열 S[1..n], 찾고자하는항목 x

출력: locationout - x가 S의어디에있는지의위치, 만약 가 S에없다면 0만약 x가 S에없다면 0

설계전략:• x가배열의중간에위치한항목과같으면, “빙고, 찾았다!” 그렇지않으면:

• 분할: 배열을반으로나누어서 x가중앙에위치한항목보다작으면왼쪽에위치

한배열반쪽을선택하고 그렇지않으면오른쪽에위치한배열반쪽을선택한다한배열반쪽을선택하고, 그렇지않으면오른쪽에위치한배열반쪽을선택한다.

• 정복: 선택된반쪽배열에서 x를찾는다.

• 통합: (필요없음)• 통합: (필요없음)

Computer Algorithmsby Yang-Sae MoonPage 6

Page 7: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

이진이진 검색검색: : 재귀재귀 알고리즘알고리즘 (2/3)(2/3)Divide and Conquer

index location (index low, index high) {index mid;

if (low > high)return 0; // 찾지 못했음

else {else {mid = (low + high) / 2 // 정수 나눗셈 (나머지 버림)if (x == S[mid])

return mid; // 찾았음else if (x < S[mid])

return location(low, mid-1); // 왼쪽 반 선택else

return location(mid+1 high);// 오른쪽 반 선택return location(mid+1, high);// 오른쪽 반 선택}

}…locationout = location(1, n);...

Computer Algorithmsby Yang-Sae MoonPage 7

Page 8: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

이진이진 검색검색: : 재귀재귀 알고리즘알고리즘 (3/3)(3/3)Divide and Conquer

Computer Algorithmsby Yang-Sae MoonPage 8

Page 9: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

이진이진 검색검색: : 알고리즘알고리즘 고찰고찰 (1/2)(1/2)Divide and Conquer

알고리즘에서함수의파라미터와지역변수는무엇인가?

입력파라미터 n S x는전역변수인가 지역변수인가?입력파라미터 n, S, x는전역변수인가, 지역변수인가?

입력파라미터 n, S, x는알고리즘수행중 변하지않는값이다. 따라서함수를재귀호출(recursive call)할때마다이러한변하지

않는파라미터를가지고다니는것은극심한낭비이다않는파라미터를가지고다니는것은극심한낭비이다.

왜?

Computer Algorithmsby Yang-Sae MoonPage 9

Page 10: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

이진이진 검색검색: : 알고리즘알고리즘 고찰고찰 (2/2)(2/2)Divide and Conquer

꼬리재귀호출(tail recursion): 재귀알고리즘에서모든재귀호출이

알고리즘의마지막(꼬리) 부분에서이루어지는경우알고리즘의마지막(꼬리) 부분에서이루어지는경우

꼬리재귀호출알고리즘은반복알고리즘(iterative algorithm)으로

변환하기가수월하다 (강의노트 03의 p 21 참조)변환하기가수월하다. (강의노트 03의 p. 21 참조)

재귀알고리즘 반복알고리즘재귀알고리즘 vs. 반복알고리즘

• 재귀알고리즘은재귀호출할때마다그당시의상태를활성레코드

(activation records) 스택에저장해놓아야한다 반면에 반복알고리즘은그(activation records) 스택에저장해놓아야한다. 반면에, 반복알고리즘은그

럴필요가없기때문에일반적으로더효율적이다(빠르다).

• 그렇다고반복 알고리즘의계산복잡도가재귀알고리즘보다좋다는의미는렇다 반복 알 리즘의계산복잡 가재귀알 리즘 다좋다는의미는

아니다. 반복알고리즘이상수적(constant factor)으로만빠르다는말이다.

• 일부언어는컴파일러가자동으로재귀프로그램을반복프로그램으로바꾸

Computer Algorithmsby Yang-Sae MoonPage 10

어준다.

Page 11: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (1/7)(1/7)

단위연산: x와 S[mid]의 비교

입력크기: 배열의크기 n (= high low + 1)입력크기: 배열의크기 n (= high - low + 1)

단위연산으로설정한조건문을함수호출마다각각두번(==, <) 수행하나 사실상비교는한번이루어진다고봐도된다 그이유는수행하나, 사실상비교는한번이루어진다고봐도된다. 그이유는:

(1) 어셈블리언어로는하나의조건명령으로충분히구현할수있기때문이기도

하고 하고;

(2) x를찾기전까지는항상두개의조건문을수행하므로하나로묶어서한단위

로취급을해도 되기때문이기도하다 로취급을해도 되기때문이기도하다.

이와같이단위연산은최대한효율적으로(빠르게) 구현된다고일

반적으로가정하여 하나의단위로취급해도된다반적으로가정하여, 하나의단위로취급해도된다.

Computer Algorithmsby Yang-Sae MoonPage 11

Page 12: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (2/7)(2/7)

경우 1: 검색하게될반쪽배열의크기가항상정확하게 ½인 경우

시간복잡도를나타내주는점화식(recurrence)은다음과같다시간복잡도를나타내주는점화식(recurrence)은다음과같다.n > 1 이고, n = 2k(k 1)

2( ) ( ) 1nW n W

이식의해는왼편의

(1) 1W (1) 1(2 ) (1) 1 2

WW W

이식의해는왼편의

과정으로구할수 있다.(2 ) (1) 1 2( 4 ) (2 ) 1 3(8 ) ( 4 ) 1 4

W WW WW W

(8 ) ( 4 ) 1 4

(16 ) (8 ) 1 5

W WW W

(2 ) 1

kW k

Computer Algorithmsby Yang-Sae MoonPage 12

( ) lg 1W n n

Page 13: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (3/7)(3/7)

앞서분석한시간복잡도가바른지확인해보자.

증명: 수학적귀납법:증명: 수학적귀납법:

• Induction basis: n = 1이면, W(1) = 1 = lg 1 + 1.

• Induction hypothesis: 2의거듭제곱(power)인양의 정수 n에 대해서, W(n) = lg n + 1라고 가정한다.

• Induction step: W(2n) = lg(2n) + 1임을 보이면 된다. 점화식(재현식)을 사용하면,

(2 ) ( ) 1lg 1 1

W n W nn

점화식에의해서

귀납가정에의해서

lg lg 2 1lg(2 ) 1nn

Computer Algorithmsby Yang-Sae MoonPage 13

Page 14: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (4/7)(4/7)

경우 2: 일반적인경우 – 반쪽배열의크기는 이됨

n에대해서가운데첨자는 이되는데 이때각 부분배열1 nmid

2n

n에대해서가운데첨자는 이되는데, 이때각 부분배열

의크기는다음과같다.2

mid

N 왼쪽부분배열의크기 id 오른쪽부분배열의크기N 왼쪽부분배열의크기 mid 오른쪽부분배열의크기

짝수 n/2 - 1 1 n/2

홀수 (n 1)/2 1 (n 1)/2

위의표에의하면알고리즘이다음단계에찾아야할항목의개수

홀수 (n-1)/2 1 (n-1)/2

위의표에의하면알고리즘이다음단계에찾아야할항목의개수

는기껏해야 개가된다. 따라서다음과같은점화식으로표현

할수 있다.2n

할수 있다.

2( ) 1 ( ) 1(1) 1

nW n W nW

일때

Computer Algorithmsby Yang-Sae MoonPage 14

(1) 1W

Page 15: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (5/7)(5/7)

앞서제시된점화식의해가 이 됨을증명한다. ( ) lg 1W n n

증명방법: 수학적귀납법

• Induction basis: n = 1이면 다음이 성립한다• Induction basis: n = 1이면, 다음이 성립한다.lg 1 lg 1 1 0 1 1 (1)n W

• Induction hypothesis: n > 1이고, 1 < k < n인 모든 k에 대해서,

가 성립한다고 가정한다.( ) lg 1W k k

Computer Algorithmsby Yang-Sae MoonPage 15

Page 16: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (6/7)(6/7)

• Induction step:

1) n이 짝수이면 (즉 ) 다음이 성립한다n n 1) n이 짝수이면 (즉, ), 다음이 성립한다.2 2

2( ) 1 ( ) nW n W 점화식에 의해서2

2

( ) ( )

1 lg 1 n

점화식에 의해서

귀납가정에의해서

2

2

2 lg

2 lg

n

n n

이짝수이므로

2 lg 1

2 lg 1

n

n

2 lg 1

1 lg

n

n

Computer Algorithmsby Yang-Sae MoonPage 16

Page 17: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer이진이진 검색검색: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (7/7)(7/7)

• Induction step:

2) n이 홀수이면 (즉 ) 다음이 성립한다1n n 2) n이 홀수이면 (즉, ), 다음이 성립한다.2 2

2( ) 1 ( ) nW n W

재현식에의해서

2

2

1 lg 1

2 lg

n

n

귀납가정에의해서

122 lg

2 lg( 1) 1

n n

n

이 홀수이므로

2 lg( 1) 1

1 lg( 1)

n

n

1 lg n n

이 홀수이므로

Computer Algorithmsby Yang-Sae MoonPage 17

( ) lg 1 (lg )W n n n 따라서, 모든 n에 대해서 이성립한다.

Page 18: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

강의강의 순서순서Divide and Conquer

이진검색 (Binary Search)

합병정렬 (Merge Sort)

The Master Theorem

빠른정렬 (Quick Sort)

행렬곱셈 (Matrix Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 18

Page 19: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬(Merge Sort) (1/2)(Merge Sort) (1/2)Divide and Conquer

문제: n개의정수를 (비내림차순으로) 정렬하시오.

입력: 정수 n, 크기가 n인배열 S[1..n]

출력: (비내림차순으로) 정렬된배열 S[1..n]출력: (비내림차순으로) 정렬된배열 S[1..n]

보기: 27, 10, 12, 20, 25, 13, 15, 22

다음페이지참조다음페이지참조

Computer Algorithmsby Yang-Sae MoonPage 19

Page 20: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬 (2/2)(2/2)Divide and Conquer

Computer Algorithmsby Yang-Sae MoonPage 20

Page 21: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 알고리즘알고리즘Divide and Conquer

void mergesort (int n, keytype S[]){

const int h = n/2, m = n - h;keytype U[1 h] V[1 m];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);mergesort(m,V);merge(h m U V S);merge(h,m,U,V,S);

}}

Computer Algorithmsby Yang-Sae MoonPage 21

Page 22: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 합병합병Divide and Conquer

문제: 두개의정렬된배열을하나의정렬된배열로합병하시오.

입력: (1) 양의정수 h, m, (2) 정렬된배열 U[1..h], V[1..m]

출력: U와 V에있는키들을하나의배열에정렬한 S[1..h+m]출력: U와 V에있는키들을하나의배열에정렬한 S[1..h m]

Computer Algorithmsby Yang-Sae MoonPage 22

Page 23: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 합병합병 알고리즘알고리즘 (1/2)(1/2)Divide and Conquer

void merge(int h, int m, const keytype U[], const keytype V[], keytype S[])keytype S[])

{index i, j, k;i = 1; j = 1; k = 1;while (i <= h && j <= m) {

if (U[i] < V[j]) {S[k] = U[i];ii++;

} else {S[k] = V[j];j++;j++;

}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];

}

Computer Algorithmsby Yang-Sae MoonPage 23

Page 24: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 합병합병 알고리즘알고리즘 (2/2)(2/2)Divide and Conquer

최악의경우시간복잡도분석

단위연산: U[i]와 V[j]의 비교

입력크기: 2개의입력배열에각각들어있는항목의개수: h, m입력크기: 2개의입력배열에각각들어있는항목의개수: h, m

분석:• i = h이고, j = m – 1인상태로루프(loop)에서 빠져나가는것이최악의경우임

• 예를들어, V에있는처음 m - 1개의항목이 S의앞부분에위치하고, U에있는 h개의모든항목이그뒤에위치하는경우임개의모든항목이그뒤에위치하는경우임

• 이때, 단위연산의실행횟수는 h + m – 1이다.

따라서 최악의경우합병하는시간복잡도는W(h ) h 1• 따라서, 최악의경우합병하는시간복잡도는W(h,m) = h + m – 1.

Computer Algorithmsby Yang-Sae MoonPage 24

Page 25: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (1/2)(1/2)Divide and Conquer

단위연산: 합병알고리즘 merge에서발생하는비교

입력크기: 배열 S에 들어있는항목의개수 n입력크기: 배열 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 이된다.

• 따라서최악의경우점화식은다음와같다.

2( ) 2 ( ) 1 1, 2 ( 1)(1) 0

knW n W n n n kW

• 이점화식의해는다음에소개할 Master Theorem을적용하면, 다음과같다.

(1) 0W

Computer Algorithmsby Yang-Sae MoonPage 25

( ) ( lg )W n n n

Page 26: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 최악의최악의 경우경우 시간시간 복잡도복잡도 (2/2)(2/2)Divide and Conquer

n이 2의거듭제곱(power)의 형태가아닌경우의점화식은다음과

같다같다.

2 2( ) ( ) ( ) 1 1(1) 0

n nW n W W n nW

그러나 이 점화식의정확한해를구하기는복잡하다

(1) 0W

그러나, 이 점화식의정확한해를구하기는복잡하다.

그런데, 앞의이진검색알고리즘의분석에서도보았듯이, n = 2k라고가정해서해를구하면 이점화식의해와같은카테고리의시간고가정해서해를구하면, 이점화식의해와같은카테고리의시간

복잡도를얻게된다.

따라서앞으로이와비슷한점화식의해를구할때, n = 2k라고가정

해서구해도점근적으로는같은해를얻게된다.

Computer Algorithmsby Yang-Sae MoonPage 26

Page 27: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 (1/3)(1/3)Divide and Conquer

입력을저장하는데 필요한 저장장소 이외에 추가적인 저장장소를

사용하지 않고 정렬하는 알고리즘을 제자리정렬(in-place sort) 알고리즘사용하지 않고 정렬하는 알고리즘을 제자리정렬(in place sort) 알고리즘

이라고한다.

앞서의합병정렬 알고리즘은 제자리정렬 알고리즘이 아니다 앞서의합병정렬 알고리즘은 제자리정렬 알고리즘이 아니다.

왜냐하면 입력인 배열 S이외에 두 개의 배열 U와 V를 추가로 만들어서 사

용하기때문이다용하기때문이다.

Computer Algorithmsby Yang-Sae MoonPage 27

Page 28: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 (2/4)(2/4)Divide and Conquer

그러면합병정렬은 얼마만큼의 추가적인 저장장소가 필요할까?

• 함수 mergesort를호출할때마다크기가 S의반이되는 U와 V가추가적으로필함수 mergesort를호출할때마다크기가 S의반이되는 U와 V가추가적으로필

요하다.

• 함수 merge에서는 U와 V가주소로전달이되어그냥사용되므로추가적인저장

장소를만들지않는다.

• 따라서, mergesort를재귀호출할때마다얼마만큼의추가적인저장장소가만들

어져야하는지를계산해보면된다어져야하는지를계산해보면된다.

• 처음 S의 크기가 n이면, 추가적으로필요한 U와 V의저장장소크기의합은 n이된다 다음재귀호출에는 n/2 그다음에는 n/4 등으로추가적인저장장소가필된다. 다음재귀호출에는 n/2, 그다음에는 n/4 등으로추가적인저장장소가필

요하다.

• 이들저장장소의크기를합하면 이된다 (다음페이지참조)2n nn n 이들저장장소의크기를합하면, 이된다. (다음페이지참조)

• 결론적으로합병정렬알고리즘의공간복잡도는 이라할수있다.2 4

2n n

Computer Algorithmsby Yang-Sae MoonPage 28

Page 29: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 (3/4)(3/4)Divide and Conquer

Computer Algorithmsby Yang-Sae MoonPage 29

Page 30: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 (4/4)(4/4)Divide and Conquer

추가적으로 필요한 저장장소가 n이 되도록, 즉, 공간복잡도가 n이 되도록

알고리즘을 향상시킬 수있다(다음 절의 알고리즘) 알고리즘을 향상시킬 수있다(다음 절의 알고리즘).

그러나, 합병정렬 알고리즘이 (공간 복잡도가 O(1))인제자리정렬 알고리

즘이될 수는 없다즘이될 수는 없다.

Computer Algorithmsby Yang-Sae MoonPage 30

Page 31: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (1/3)(1/3)Divide and Conquer

문제: n개의정수를 (비내림차순으로) 정렬하시오.

입력: 정수 n 크기가 n인배열 S[1 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);merge2(low, mid, high);

}}...mergesort2(1, n);

Computer Algorithmsby Yang-Sae MoonPage 31

...

Page 32: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (2/3)(2/3)Divide and Conquer

합병(merge2)

문제 두 개의 정렬된 배열을 하나의 정렬된 배열로 합병하시오• 문제: 두 개의 정렬된 배열을 하나의 정렬된 배열로 합병하시오.

• 입력: (1) 첨자 low, mid, high, (2) 부분 배열 S[low..high](단, S[low..mid]와 S[mid+1..high]는이미 각각 정렬이 완료되어 있음)

• 출력: 정렬이 완료된 부분배열 S[1..high]정 [ g ]

Computer Algorithmsby Yang-Sae MoonPage 32

Page 33: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

합병정렬합병정렬: : 공간공간 복잡도복잡도 향상향상 알고리즘알고리즘 (3/3)(3/3)Divide and Conquer

void merge2(index low, index mid, index high){

i d i j kindex i, j, k;keytype U[low..high]; // 합병하는데 필요한 지역 배열

i = low; j = mid + 1; k = low;while (i <= mid && j <= high) {while (i <= mid && j <= high) {

if (S[i] < S[j]) {U[k] = S[i];i++; merge2() 함수는 어느 한 순간에 하나만i++;

} else {U[k] = S[j];j++;

g 함수는 어느 한 순간에 하나만

호출된다. 재귀 호출이 아님에 유의한다.

j}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];

Computer Algorithmsby Yang-Sae MoonPage 33

}

Page 34: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

강의강의 순서순서Divide and Conquer

이진검색 (Binary Search)

합병정렬 (Merge Sort)

The Master Theorem

빠른정렬 (Quick Sort)

행렬곱셈 (Matrix Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 34

Page 35: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

The Master TheoremThe Master TheoremDivide and Conquer

Consider a function f(n) that, for all n=bk for all kZ+,

i fi h l i ksatisfies the recurrence relation: (n=bk 일 때, 다음 점화 관계가 성립하면)

f(n) = af(n/b) + cnd

with a≥1, integer b>1, real c>0, d≥0. Then:

O( ) if d dbO( ) if ( ) O( log ) if

d d

d d

n a bf n n n a b

log

( ) ( g )

O( ) if b a d

f

n a b

Proof of the theorem is …. omitted.

Computer Algorithmsby Yang-Sae MoonPage 35

Page 36: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Master Theorem Examples (1/3)Master Theorem Examples (1/3)Divide and Conquer

Complexity of fast multiplication was:

T( ) 3T( /2) ( )T(n)=3T(n/2)+(n)

Thus a=3 b=2 d=1 So a > bd so case 3 of the master Thus, a 3, b 2, d 1. So a > b , so case 3 of the master

theorem applies, so:

2log log 3( ) O( ) O( )b aT n n n

which is O(n1.58…).

Computer Algorithmsby Yang-Sae MoonPage 36

Page 37: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Master Theorem Examples (2/3)Master Theorem Examples (2/3)Divide and Conquer

예제: Binary Search이진 탐색의 복잡도는 얼마인가(비교 수를 추정하라)?이진 탐색의 복잡도는 얼마인가(비교 수를 추정하라)?

• 이진 탐색의 점화 관계: T(n) = T(n/2)+c (n 이 짝수라 가정)

• 매스터 정리로 보면, a = 1, b = 2, d = 0으로서,

a = 1 = bd인 두 번째 경우에 해당한다.

• 결국, 다음과 같은 과정에 의해 O(logn)이 된다.

0( ) O( l ) O( l ) O(l )dT 0( ) O( log ) O( log ) O(log )dT n n n n n n

Computer Algorithmsby Yang-Sae MoonPage 37

Page 38: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Master Theorem Examples (3/3)Master Theorem Examples (3/3)Divide and Conquer

예제: Merge Sort합병 정렬의 복잡도는 얼마인가(비교 수를 추정하라)?합병 정렬의 복잡도는 얼마인가(비교 수를 추정하라)?

• 이진 탐색의 점화 관계: T(n) = 2T(n/2)+cn (n 이 짝수라 가정)

• 매스터 정리로 보면, a = 2, b = 2, d = 1로서,

a = 2 = bd인 두 번째 경우에 해당한다.

• 결국, 다음과 같은 과정에 의해 O(nlogn)이 된다.

1( ) O( l ) O( l ) O( l )dT 1( ) O( log ) O( log ) O( log )dT n n n n n n n

Computer Algorithmsby Yang-Sae MoonPage 38

Page 39: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

강의강의 순서순서Divide and Conquer

이진검색 (Binary Search)

합병정렬 (Merge Sort)

The Master Theorem

빠른정렬 (Quick Sort)

행렬곱셈 (Matrix Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 39

Page 40: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

빠른정렬빠른정렬(Quick Sort) (Quick Sort) –– 개요개요 (1/3)(1/3)Divide and Conquer

1962년에 영국의 호아(C.A.R. Hoare)의 의해서 고안

빠른정렬(Quicksort)란 이름이 오해의 여지가 있음

왜냐하면 사실 절대적으로 가장 빠른 정렬 알고리즘이라고왜냐하면 사실 절대적으로 가장 빠른 정렬 알고리즘이라고

할 수는 없기 때문이다.

차라리 “분할교환정렬(partition exchange sort)”라고 부르

는 게 더 정확하다는 게 더 정확하다.

Computer Algorithmsby Yang-Sae MoonPage 40

Page 41: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬(Quick Sort) (Quick Sort) –– 개요개요 (2/3)(2/3)

주어진 배열을 두 개로 분할하고, 각각을 정렬한다.

합병정렬과 동일? 합병정렬과 동일?

다른점 1: 합병정렬은 그냥 두 부분으로 나누는 반면에, 다른점 1: 합병정렬은 그냥 두 부분으로 나누는 반면에,

빠른정렬은 분할할 때, 기준 아이템(pivot item) 중심으로,

이보다 작은 것은 왼편 큰 것은 오른편에 위치시킨다이보다 작은 것은 왼편, 큰 것은 오른편에 위치시킨다.

다른점 2: 각 부분 정렬이 끝난 후, 합병정렬은 “합병”이란다른점 각 부분 정렬이 끝난 후, 합병정렬은 합병 이란

후처리 작업이 필요하나, 빠른정렬은 필요로 하지 않는다.

Computer Algorithmsby Yang-Sae MoonPage 41

Page 42: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬(Quick Sort) (Quick Sort) –– 개요개요 (3/3)(3/3)

예제: 15, 22, 13, 27, 12, 10, 20, 25

Computer Algorithmsby Yang-Sae MoonPage 42

Page 43: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 정렬정렬 알고리즘알고리즘

문제: n개의 정수를 (비내림차순으로) 정렬

입력: 정수 n > 0 크기가 n인 배열 S[1 n]입력: 정수 n > 0, 크기가 n인 배열 S[1..n]

출력: 비내림차순으로 정렬된 배열 S[1..n]

알고리즘:

void quicksort (index low, index high){

index pivotpoint;if (high > low) {if (high > low) {

partition(low,high,pivotpoint);quicksort(low,pivotpoint-1);q ( ,p p );quicksort(pivotpoint+1,high);

}

Computer Algorithmsby Yang-Sae MoonPage 43

}

Page 44: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 분할분할 알고리즘알고리즘 ((1/3)1/3)

문제: 빠른정렬을 하기 위해서 배열 S를 둘로 쪼갠다.

입력:입력:(1) 첨자 low, high(2) 첨자 low에서 high까지의 S의 부분배열(2) 첨자 low에서 high까지의 S의 부분배열

출력: (1) S의 부분배열을 분할한 기준점 pivotpoint(1) S의 부분배열을 분할한 기준점 pivotpoint(2) 기준점에 의해 분할된 S의 부분배열 (좌우로 이동된 부분배열)

알고리즘: (the next page)알고리즘: (the next page)

Computer Algorithmsby Yang-Sae MoonPage 44

Page 45: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 분할분할 알고리즘알고리즘 ((2/3)2/3)

void partition (index low, index high, index& pivotpoint){{

index i, j;keytype pivotitem;pivotitem = S[low]; // pivotitem을 위한 첫번째 항목을 고른다j = low;for(i = low + 1; i <= high; i++)

if (S[i] < pivotitem) { // 순서 바뀌었으면, j 증가하고 교환j++;exchange S[i] and S[j];g [ ] [j]

}pivotpoint = j;exchange S[low] and S[pivotpoint];exchange S[low] and S[pivotpoint];// pivotitem 값을 pivotpoint에 넣는다

}

Computer Algorithmsby Yang-Sae MoonPage 45

Page 46: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 분할분할 알고리즘알고리즘 (3/3)(3/3)

low j i high

< pivotitem > pivotitem to be investigated

if(S[i] > pivotitem)

low j i high

< pivotitem > pivotitem to be investigatedp p g

if(S[i] < pivotitem)

l j i highilow j i high

i i

i

Computer Algorithmsby Yang-Sae MoonPage 46

< pivotitem > pivotitem to be investigated

Page 47: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 분할분할 알고리즘알고리즘 예제예제

i j S[1] S[2] S[3] S[4] S[5] S[6] S[7] S[8] 비고

-

2

-

1

15 22 13 27 12 10 20 25

15 22 13 27 12 10 20 25

초기값

3

4

12

2

15 22 13 27 12 10 20 25

15 13 22 27 12 10 20 25

5

6

23

34

15 13 22 27 12 10 20 25

15 13 12 27 22 10 20 25

7

8

4

4

15 13 12 10 22 27 20 25

15 13 12 10 22 27 20 25

- 4 10 13 12 15 22 27 20 25 최종값

Computer Algorithmsby Yang-Sae MoonPage 47

Page 48: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Worst Case) (1/5)(Worst Case) (1/5)

분할 알고리즘의 모든 경우를 고려한 시간복잡도 분석

단위연산 S[i]와 k 와의 비교• 단위연산: S[i]와 key와의 비교

• 입력크기: 부분배열이 가지고 있는 항목의 수, n = high - low + 1

• 분석: 배열의 첫번째 항목만 제외하고 모든 항목을 한번씩 비교하므

로, T(n) = n – 1이다., ( ) 이다

n개 항목에 대한 분할에서는 기본적으로 n – 1번의 비교가 이루어짐

Computer Algorithmsby Yang-Sae MoonPage 48

Page 49: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Worst Case) (2/5)(Worst Case) (2/5)

빠른정렬 알고리즘의 시간복잡도 분석

• 단위연산: 분할알고리즘의 S[i]와 key와의 비교• 단위연산: 분할알고리즘의 S[i]와 key와의 비교

• 입력크기: 배열이 S가 가지고 있는 항목의 수, n

• 분석: • 분석:

배열이 이미 비내림차순으로 정렬이 된 경우가 최악이다.

왜 그럴까? 비내림차순으로 정렬되어 있으면 첫번째(기준점) 항목보다왜 럴까 비내림차순 정렬되어 있 면 첫번째(기준점) 항목 다

작은 항목은 없으므로, 크기가 n인 배열은 크기가 0인 부분배열은 왼쪽

에 오고, 크기가 n-1인 부분배열은 오른쪽에 오도록 계속 쪼개진다.

• 따라서, 점화식은 다음과 같다.

( ) (0) ( 1) 1T n T T n n

• 그런데, T(0) = 0이므로, 점화식은 다음과 같이 된다.

Computer Algorithmsby Yang-Sae MoonPage 49

T(n) = T(n - 1) + n - 1, if n > 0 (T(0) = 0, otherwise)

Page 50: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Worst Case) (3/5)(Worst Case) (3/5)

이 점화식을 풀면, 다음과 같다.

( ) ( 1) 1T n T n n( ) ( 1) 1( 1) ( 2) 2( 2) ( 3) 3

T n T n nT n T n nT n T n n

( 2) ( 3) 3

...(2) (1) 1

T n T n n

T T

이미 정렬이 되어 있는 경우

알고리즘의 시간복잡도는

n(n 1)/2이 된다 그러면 (2) (1) 1(1) (0) 0(0) 0

T TT TT

n(n–1)/2이 된다. 그러면, 시간이 더 많이 걸리는 경우는

없을까? (0) 0( ) (0) ( 1) 1

( 1)

TT n T T n n

n n

사실, 이 경우가 최악이며, 따라서 이 보다 더 많은( )

2 시간이 걸릴 수 없다는

사실을 수학적으로

엄밀하게 증명한다

Computer Algorithmsby Yang-Sae MoonPage 50

엄밀하게 증명한다.

Page 51: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Worst Case) (4/5) (Worst Case) (4/5) -- skipskip

모든 정수 n에 대해서, 임을 증명하시오.

증명: (수학적귀납법)

( 1)2( ) n nW n

증명: (수학적귀납법)

• 귀납출발점: n = 0일 때,

• 귀납가정: 0 k < n인 모든 k에 대해서

0(0 1)2(0)W

( 1)2( ) k kW k • 귀납가정: 0 k < n인 모든 k에 대해서,

• 귀납단계:

2( )W k

( 1)2( ) n nW n

( 1)( 2) ( )( 1)2 2

( ) ( 1) ( ) 1 pivotpoint

1 p p n p n p

W n W p W n p n

n

값이p인경우점화식에의해

귀납가정에의해2 2

2 2

3 2 ( ) 2 22

( ) 22

p p n p n p n

p n p n p

2

Computer Algorithmsby Yang-Sae MoonPage 51

Page 52: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Worst Case) (5/5) (Worst Case) (5/5) –– skipskip

여기서 p가 n - 1일 때 최대값을 가진다. 따라서

2 2 2 2 2( ( ) ) 1 ( 1) 2 2

가 되고, 결과적으로

2 2 2 2 21 1( ( ) ) 1 ( 1) 2 2p nmax p n p n n n

가 되고, 결과적으로

2 2 2 2( ) 2 ( 1)2 2 2( )2 2 2 2

p n p n p n nn n n n nW n

가 된다. 따라서 최악의 경우 시간복잡도는 다음과 같다.

( ) 2( 1)( ) ( )2

n nW n n

Computer Algorithmsby Yang-Sae MoonPage 52

Page 53: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Average Case) (1/4)(Average Case) (1/4)

결국, 빠른정렬의 Worst Case Complexity는 로, 합병정렬에 비해

좋지 못하다.

2( )n

그런데, 왜 “빠른”정렬이라고 했을까?

이는 다음에 계산되는 Average Case Complexity 때문이다이는 다음에 계산되는 Average Case Complexity 때문이다.

Computer Algorithmsby Yang-Sae MoonPage 53

Page 54: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Average Case) (2/4)(Average Case) (2/4)

단위연산: 분할알고리즘의 S[i]와 key와의 비교

입력크기: 배열이 S가 가지고 있는 항목의 수 n입력크기: 배열이 S가 가지고 있는 항목의 수, n

분석:

배열 안에 있는 항목이 특정 순서로 정렬된 경우는 별로 없다 • 배열 안에 있는 항목이 특정 순서로 정렬된 경우는 별로 없다.

• 그러므로 분할 알고리즘이 주는 기준점 값은 1부터 n사이의 어떤 값도 될 수

가 있고 그 확률은 모두 같다고 봐도 된다 가 있고, 그 확률은 모두 같다고 봐도 된다.

• 기준점이 p가 될 확률은 1/n이고, 기준점이 p일 때 두 부분배열을 정렬하는데 걸리는 평균기간은p[A(p - 1) + A(n - p)]이고, 분할하는데 걸리는 시간은 n - 1이므로, 평균적인 시간복잡도는 다음과 같이 된다.

1

1( ) [ ( 1) ( )] 1

2 ( 1) 1

n

p

n

A n A p A n p nn

A

Computer Algorithmsby Yang-Sae MoonPage 54

1( 1) 1

pA p n

n

Page 55: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Average Case) (3/4(Average Case) (3/4) ) –– skipskip

분석(계속):

• 양변을 n을 곱하면 1( ) 2 ( 1) ( 1) (1)nnA n A p n n • 양변을 n을 곱하면,

• n대신 n - 1을 대입하면,

1( ) ( ) ( ) ( )

pp

1

1( 1) ( 1) 2 ( 1) ( 1)( 2 ) (2 )n

pn A n A p n n

( ) ( 1) ( 1) 2 ( 1) 2( 1)A A A• (1)에서 (2)를 빼면,

• 간단히 정리하면,

( ) ( 1) ( 1) 2 ( 1) 2( 1)nA n n A n A n n

( ) ( 1) 2( 1)1 ( 1)

A n A n n

• 여기서, 라 하면, 다음과 같은 점화식을 얻을 수 있다.

1 ( 1)n n n n

( )1n

A na , ,1n n

12( 1) 0

( 1)n nna a n

n n

이면

• 그러면, 다음 관계가 성립한다.

( 1)n n

2( 1) 2( 2 )n n

Computer Algorithmsby Yang-Sae MoonPage 55

11 1 2 2 1 1 03

2( 1) 2( 2 ), , , , 0( 1) ( 1)n n n nn na a a a a a a a

n n n n

Page 56: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer빠른정렬빠른정렬 –– 알고리즘알고리즘 분석분석 (Average Case) (4/4(Average Case) (4/4) ) –– skipskip

분석(계속):

• 따라서 해는 다음과 같다2 ( 1 )n ia • 따라서, 해는 다음과 같다.

( 1 )1

1 11 ( 1 )1 1

2

n i ii

n ni i ii i

a

• 여기에서 오른쪽 항은 무시해도 될 만큼 작으므로 무시한다. 그런데 l l 이고그런데, ln n = logen이고,

1 1 11 ln2

n

ni

이므로, 해는 an 2 ln n이다.

1 2i i n

( ) ( 1)2 lnA n n n • 따라서, A(n)은 다음과 같다.

( ) ( 1)2 ln( 1)2(ln 2 )(lg )1.38( 1) lg

A n n nn n

n n

Computer Algorithmsby Yang-Sae MoonPage 56

( lg )n n

Page 57: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

강의강의 순서순서Divide and Conquer

이진검색 (Binary Search)

합병정렬 (Merge Sort)

The Master Theorem

빠른정렬 (Quick Sort)

행렬곱셈 (Matrix Multiplication)

Computer Algorithmsby Yang-Sae MoonPage 57

Page 58: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬행렬 개요개요 (1/4)(1/4)

행렬이 뭐였더라?

H 행렬이란 M i 여 이거 Hmmm… 행렬이란 Matrix여… 이거

행렬에 대한 지식을 모두 반납한 학생들을 위해 몇 가지 기본 사항만

Computer Algorithmsby Yang-Sae MoonPage 58

행렬에 대한 지식을 모두 반납한 학생들을 위해 몇 가지 기본 사항만

잠시 리뷰해 볼까요?

Page 59: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬행렬 개요개요 (2/4)(2/4)

행렬은 수의 사각형 배열이다.

m n (“m by n”) 행렬은 m개의 행과 n개의 열을 갖는다mn ( m by n ) 행렬은 m개의 행과 n개의 열을 갖는다.

n,,, aaa 12111

n,,,j,i

aaaa

22212A

행과 열의 개수가 같은 nxn 행렬을 정방행렬이라 한다.

n,m,m,m aaa 21

행과 열의 개수가 같은 nxn 행렬을 정방행렬이라 한다.

두 행렬이 같은 수의 행과 열을 가지며 각 위치의 해당 원소의 값이 같으

면 “두 행렬은 같다”고 정의한다면 두 행렬은 같다 고 정의한다.

061023

6123

6123

Computer Algorithmsby Yang-Sae MoonPage 59

0616161

Page 60: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬행렬 개요개요 (3/4)(3/4)

행렬의 합:

A+B = C = [ci j] = [ai j+bi j] where A = [ai j] and B = [bi j][ i,j] [ i,j i,j] [ i,j] [ i,j]

244143101

252313

211031

043322

252211043

Computer Algorithmsby Yang-Sae MoonPage 60

Page 61: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬행렬 개요개요 (4/4)(4/4)

행렬의 곱:

k

j,,ij,i bac1

CABa a a 1,1 1,2 1,

1,1 1,2 1, 1,2 ,1 2 ,2 2 , 1,1 1,2 1,

2 ,1 2 ,2 2 , 2 , 2 ,1 2 ,2 2 ,

...... ...... ...... ... ...

k

j nk n

j n

a a ab b b ba a a c c cb b b b c c c

n

,1 ,2 ,

,1 ,2 , ,

1 1

...... ...

...

i i i k

k k k j k n

m m m k

a a ab b b b

a a a

,

,1 ,2 ,...i j

m m m n

cc c c

,1 ,1 ,m m m k

0110

311231501

3002020110

302110

1301

Computer Algorithmsby Yang-Sae MoonPage 61

Page 62: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬곱셈행렬곱셈 –– 단순단순 알고리즘알고리즘 (1/3)(1/3)

문제: n n 크기의 행렬의 곱을 구하시오.

입력: 양수 n n n 크기의 행렬 A와 B입력: 양수 n, n n 크기의 행렬 A와 B

출력: 행렬 A와 B의 곱인 C

알고리즘:, , ,

1

n

i j i k k jk

AB C c a b

알고리즘:

void matrixmult (int n, const number A[][], const number B[][], number C[][])[][], [][])

{index i, j, k;for (i = 1; i <= n; i++)for (i 1; i < n; i++)

for (j = 1; j <= n; j++) {C[i][j] = 0;for (k = 1; k <= n; k++)for (k = 1; k <= n; k++)

C[i][j] = C[i][j] + A[i][k] * B[k][j];}

}

Computer Algorithmsby Yang-Sae MoonPage 62

}

Page 63: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬곱셈행렬곱셈 –– 단순단순 알고리즘알고리즘 (2/3)(2/3)

곱셈 연산의 시간복잡도 분석

단위연산: 가장 안쪽의 루프에 있는 곱셈하는 연산

입력크기: 행과 열의 수, n

모든 경우 시간복잡도 분석: 총 곱셈의 횟수는 다음과 같다.

3 3( ) ( )T n n n n n n

Computer Algorithmsby Yang-Sae MoonPage 63

Page 64: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer행렬곱셈행렬곱셈 –– 단순단순 알고리즘알고리즘 (3/3)(3/3)

덧셈(뺄셈) 연산의 시간복잡도 분석

단위연산: 가장 안쪽의 루프에 있는 덧셈(뺄셈)하는 연산

입력크기: 행과 열의 수, n

모든 경우 시간복잡도 분석: 총 덧셈의 횟수는 다음과 같다.

3 2 3( ) ( 1) ( )T n n n n n n n

k=1일 때는 덧셈이 필요 없기 때문

Computer Algorithmsby Yang-Sae MoonPage 64

Page 65: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– 2x2 2x2 행렬행렬 (1/2)(1/2)

문제: 두 2 2 행렬 A와 B의 곱(product) C,

11 12 11 12 11 12c c a a b b 11 12 11 12 11 12

21 22 21 22 21 22

c c a a b bc c a a b b

쉬트라쎈(Strassen)의 해:1 11 22 11 22( ) ( )

( )m a a b bm a a b

1 4 5 7 3 5m m m m m mC

m m m m m m

2 21 22 11

3 11 12 22

4 22 21 11

( )( )

where ( )

m a a bm a b bm a b b

2 4 1 3 2 6m m m m m m

5 11 12 22

6 21 11 11 12

( )( ) ( )( ) ( )

m a a bm a a b b

b b

7 12 22 21 22( ) ( )m a a b b

Why? 앉아서 꼼꼼히 따져보세요.

Computer Algorithmsby Yang-Sae MoonPage 65

Page 66: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– 2x2 2x2 행렬행렬 (2/2)(2/2)

시간복잡도 분석:

• 단순 곱셈 방법: 8번의 곱셈과 4번의 덧셈이 필요함

• 쉬트라쎈 방법: 7번의 곱셈과 18번의 덧셈/뺄셈이 필요함

언뜻 봐서는 전혀 좋아지지 않았다!

그러나 행렬의 크기가 커지면 쉬트라쎈의 방법의 가치가 드러난다그러나 행렬의 크기가 커지면 쉬트라쎈의 방법의 가치가 드러난다.

Computer Algorithmsby Yang-Sae MoonPage 66

Page 67: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (1/7)(1/7)

문제: n이 2의 거듭제곱이고, 각 행렬을 4개의 부분행렬(submatrix)로나눈다고 가정하자. 두 n n 행렬 A와 B의 곱 C:나눈다 가정하자 두 행렬 와 의 곱

11 12 11 12 11 12

21 22 21 22 21 22

C C A A B BC C A A B B

쉬트라쎈(Strassen)의 해:1 11 22 11 22( ) ( )M A A B B

21 22 21 22 21 22

M M M M M M

1 11 22 11 22

2 21 22 11

3 11 12 22

( ) ( )( )

( )

M A A B BM A A BM A B B

1 4 5 7 3 5

2 4 1 3 2 6

M M M M M MC

M M M M M M

4 22 21 11

5 11 12 22

where ( )( )( ) ( )

M A B BM A A BM A A B B

6 21 11 11 12

7 12 22 21 22

( ) ( )( ) ( )

M A A B BM A A B B

Computer Algorithmsby Yang-Sae MoonPage 67

Page 68: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (2/7)(2/7)

문제: n이 2의 거듭제곱일 때, n n 크기의 두 행렬의 곱을 구하시오.

입력: 정수 n, n n 크기의 행렬 A와 B입력: 정수 n, n n 크기의 행렬 A와 B

출력: 행렬 A와 B의 곱인 C

알고리즘:알 리즘

void strassen (int n, nxn matrix A, nxn matrix B, nxn_matrix& C){

if (n <= threshold)if (n <= threshold)단순한 알고리즘을 사용하여 C = A * B를 계산;

else {A를 4개의 부분행렬 A11 A12 A21 A22로 분할A를 4개의 부분행렬 A11, A12, A21, A22로 분할;B를 4개의 부분행렬 B11, B12, B21, B22로 분할;쉬트라쎈의 방법을 사용하여 C = A * B를 계산;// 재귀 호출의 예 ( /2 11 12 11 22 1)// 재귀 호출의 예: strassen(n/2, A11+A12, B11+B22, M1)

}}

Computer Algorithmsby Yang-Sae MoonPage 68

Threshold? 단순 알고리즘보다 쉬트라쎈 알고리즘이 더 좋을 것이라 예상되는 지점

Page 69: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (3/7)(3/7)

곱셈 연산의 시간복잡도 분석

단위연산: 곱셈하는 연산

입력크기: 행과 열의 수, n

모든 경우 시간복잡도 분석: threshold를 1이라고 하자

(참고: threshold는 복잡도 차수에 전혀 영향을 미치지 않는다.)(참고: threshold는 복잡도 차수에 전혀 영향을 미치지 않는다.)

점화식을 다음과 같이 구할 수 있다.

2( ) 7 ( ) 1 , 2 ( 1)(1) 1

knT n T n n kT

이고

Why? 하나의 nxn 곱셈이 일곱 개의 (n/2)x(n/2) 곱셈으로 바뀌었기 때문

Computer Algorithmsby Yang-Sae MoonPage 69

Page 70: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (4/7)(4/7)

곱셈 연산의 시간복잡도 분석 (계속)

점화식을 전개하면 다음과 같다.

( ) 7 7 7 ( tim es)T n k k

lg n

( ) ( )7

7

lg 7

2.81

7

nn

2.81

n(n )

상기 결과는 귀납법에 의해서 증명이 가능하다. (Try it!)

또한, 상기 점화식은 Master Theorem 1번을 이용하면 간단히 해를 구할

Computer Algorithmsby Yang-Sae MoonPage 70

한, 상기 점화식은 번을 이용하면 간단히 해를 구할

수 있다. (Also, try it!)

Page 71: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (5/7)(5/7)

덧셈(뺄셈) 연산의 시간복잡도 분석

단위연산: 덧셈/뺄셈하는 연산

입력크기: 행과 열의 수, n

모든 경우 시간복잡도 분석: 앞서와 마찬가지로 threshold를 1이라 한다.

점화식을 다음과 같이 구할 수 있다점화식을 다음과 같이 구할 수 있다.

2( ) 7 ( ) 18( ) 1 2 ( 1)kn nT n T n n k 2 2( ) 7 ( ) 18( ) 1 2 ( 1)(1) 0T n T n n kT

Why?nxn 곱셈이 일곱 개의 (n/2)x(n/2) 곱셈으로 바뀌었고, 18번의 (n/2)x(n/2) 행렬 덧셈이 필요한데, 각각은 ( /2)^2 번의 덧셈을 필요로 하기 때문

Computer Algorithmsby Yang-Sae MoonPage 71

각각은 (n/2)^2 번의 덧셈을 필요로 하기 때문

Page 72: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (6/7)(6/7)

덧셈(뺄셈) 연산의 시간복잡도 분석 (계속)

점화식은 다음과 같다.

22 2( ) 7 ( ) 18( ) 1 2 ( 1)kn nT n T n n k

을 사용하면 상기 점화식의 해는 다음과 같이 구할 수 있

2 2( ) ( ) ( ) ( )(1) 0T

Master Theorem을 사용하면 상기 점화식의 해는 다음과 같이 구할 수 있

다.

l 7 2 812lg 7 2.81( ) ( ) ( )T n n n

O( ) if d dn a b

log

O( ) if ( ) ( / ) ( ) O( log ) if

O( ) if b

d d

d d d

a d

n a bf n af n b cn f n n n a b

n a b

Computer Algorithmsby Yang-Sae MoonPage 72

gO( ) if bn a b

Page 73: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer쉬트라쎈쉬트라쎈 방법방법 –– nnxxnn 행렬행렬 (7/7)(7/7)

Strassen은 행렬 곱셈의 복잡도를 에서 으로 낮추었다.

이후에 곱셈의 복잡도를 까지 낮춘 알고리즘이 개발되었다

2.81( )n3( )n

2.38( )이후에 곱셈의 복잡도를 까지 낮춘 알고리즘이 개발되었다.

그렇다면, 과연 얼마까지 복잡도를 낮출 수 있을까?

2.38( )n

두 행렬을 곱하기 위한 문제에 대해서 시간복잡도가 이 되는 알고2( )n두 행렬을 곱하기 위한 문제에 대해서 시간복잡도가 이 되는 알고

리즘을 만들어 낸 사람은 아무도 없다.

게다가 그러한 알고리즘을 만들 수 없다고 증명한 사람도 아무도 없다

( )n

게다가 그러한 알고리즘을 만들 수 없다고 증명한 사람도 아무도 없다.

Computer Algorithmsby Yang-Sae MoonPage 73

Page 74: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and Conquer큰큰 정수정수 계산법계산법, , 임계값임계값 결정결정 skipskip

Computer Algorithmsby Yang-Sae MoonPage 74

Page 75: 알고리즘(Algorithm) Divide and CCq (onquer (분할정복cs.kangwon.ac.kr/~ysmoon/courses/2011_1/alg/05.pdf · 2016. 6. 2. · Divide and CCq (onquer (분할정복) 2011년년봄학기봄학기

Divide and ConquerHomework#3Homework#3

Computer Algorithmsby Yang-Sae MoonPage 75