재귀 알고리즘 - kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. ·...

13
2012봄학기 강원대학교 컴퓨터과학전공 문양세 이산수학(Discrete Mathematics) 재귀 알고리즘 (Recursive Algorithms)

Upload: others

Post on 24-Feb-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

2012년 봄학기

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

이산수학(Discrete Mathematics)

재귀 알고리즘

(Recursive Algorithms)

Page 2: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 2

Introduction 3.5 Recursive Algorithms

Recursive definitions can be used to describe algorithms as

well as functions and sets.

(재귀적 정의를 수행한 경우, 손쉽게 알고리즘의 함수/집합으로 기술할 수 있다.)

예제: A procedure to compute an.

procedure power(a≠0: real, nN)

if n = 0 then return 1

else return a · power(a, n−1)

Page 3: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 3

Efficiency of Recursive Algorithms

The time complexity of a recursive algorithm may depend

critically on the number of recursive calls it makes.

(재귀 호출에서의 시간 복잡도는 재귀 호출 횟수에 크게 의존적이다.)

예제: Modular exponentiation to a power n can take log(n)

time if done right, but linear time if done slightly

differently. (잘하면 O(log(n))이나, 조금만 잘못하면 O(n)이 된다.)

• Task: Compute bn mod m, where

m≥2, n≥0, and 1≤b<m.

3.5 Recursive Algorithms

Page 4: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 4

Modular Exponentiation Algorithm #1

Uses the fact that

• bn = b·bn−1 and that

• x·y mod m = x·(y mod m) mod m.

3.5 Recursive Algorithms

Note this algorithm takes (n) steps!

procedure mpower(b≥1,n≥0,m>b N)

{Returns bn mod m.}

if n=0 then return 1;

else return (b·mpower(b,n−1,m)) mod m;

Page 5: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 5

Modular Exponentiation Algorithm #2

Uses the fact that

• b2k = bk·2 = (bk)2,

• x·y mod m = x·(y mod m) mod m, and

• x·x mod m = (x mod m)2 mod m.

3.5 Recursive Algorithms

What is its time complexity?

procedure mpower(b,n,m) {same signature}

if n=0 then return 1

else if 2|n then

return mpower(b,n/2,m)2 mod m

else return (mpower(b,n−1,m)·b) mod m

(첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임)

(log n) steps

Page 6: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 6

A Slight Variation of Algorithm #2

Nearly identical but takes (n) time instead!

3.5 Recursive Algorithms

The number of recursive calls made is critical.

procedure mpower(b,n,m) {same signature}

if n=0 then return 1

else if 2|n then

return (mpower(b,n/2,m)·mpower(b,n/2,m)) mod m

else return (mpower(b,n−1,m)·b) mod m

Page 7: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 7

Recursive Euclid’s Algorithm (예제)

Note recursive algorithms are often simpler to code than

iterative ones… (Recursion이 코드를 보다 간단하게 하지만…)

However, they can consume more stack space, if your

compiler is not smart enough.

(일반적으로, recursion은 보다 많은 stack space를 차지한다.)

3.5 Recursive Algorithms

procedure gcd(a,bN)

if a = 0 then return b

else return gcd(b mod a, a)

Page 8: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 8

Recursion vs. Iteration (1/3) 3.5 Recursive Algorithms

Factorial – Recursion

procedure factorial(nN)

if n = 1 then return 1

else return n factorial(n – 1)

Factorial – Iteration

procedure factorial(nN)

x := 1

for i := 1 to n

x := i x

return x

Page 9: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 9

Recursion vs. Iteration (2/3) 3.5 Recursive Algorithms

Fibonacci – Recursion

procedure fibonacci(n: nonnegative integer)

if (n = 0 or n = 1) then return n

else return (fibonacci(n–1) + fibonacci(n–2))

Fibonacci – Iteration

procedure fibonacci(n: nonnegative integer)

if n = 0 then return 0

else

x := 0, y := 1

for i := 1 to n – 1

z := x + y, x := y, y := z

return z

Page 10: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 10

3.5 Recursive Algorithms

재귀(recursion)는 프로그램을 간단히 하고, 이해하기가 쉬

운 장점이 있는 반면에,

각 호출이 스택을 사용하므로, depth가 너무 깊어지지 않도

록 조심스럽게 프로그래밍해야 함

컴퓨터에게 보다 적합한 방법은 반복(iteration)을 사용한 프

로그래밍이나, 적당한 범위에서 재귀를 사용하는 것이 바람

직함

Recursion vs. Iteration (3/3)

Page 11: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 11

Merge Sort (예제) (1/2)

The merge takes (n) steps, and merge-sort takes

(n log n).

3.5 Recursive Algorithms

procedure sort(L = 1,…, n)

if n>1 then

m := n/2 {this is rough ½ -way point}

L := merge(sort(1,…, m), sort(m+1,…, n))

return L

Page 12: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 12

The Merge Routine

3.5 Recursive Algorithms

procedure merge(A, B: sorted lists)

L = empty list

i:=0, j:=0, k:=0

while i<|A| j<|B| {|A| is length of A}

if i=|A| then Lk := Bj; j := j + 1

else if j=|B| then Lk := Ai; i := i + 1

else if Ai < Bj then Lk := Ai; i := i + 1

else Lk := Bj; j := j + 1

k := k+1

return L

Merge Sort (예제) (2/2) – skip

Page 13: 재귀 알고리즘 - Kangwoncs.kangwon.ac.kr/~ysmoon/courses/2012_1/dm/19.pdf · 2016. 6. 2. · (첫 번째 mpower()는 한번 call되고, 그 값을 제곱하는 것임) (log n)

Discrete Mathematics by Yang-Sae Moon Page 13

Homework #5 3.5 Recursive Algorithms