Presentation is loading. Please wait.

Presentation is loading. Please wait.

이산수학 (Discrete Mathematics) 3.5 재귀 알고리즘 (Recursive Algorithms) 2006 년 봄학기 문양세 강원대학교 컴퓨터과학과.

Similar presentations


Presentation on theme: "이산수학 (Discrete Mathematics) 3.5 재귀 알고리즘 (Recursive Algorithms) 2006 년 봄학기 문양세 강원대학교 컴퓨터과학과."— Presentation transcript:

1 이산수학 (Discrete Mathematics) 3.5 재귀 알고리즘 (Recursive Algorithms) 2006 년 봄학기 문양세 강원대학교 컴퓨터과학과

2 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. ( 재귀적 정의를 수행한 경우, 손쉽게 알고리즘의 함수 / 집합으로 기술할 수 있다.) 예제 1: A procedure to compute a n. procedure power(a≠0: real, n  N) if n = 0 then return 1 else return a · power(a, n−1)

3 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. ( 재귀 호출에서의 시간 복잡도는 재귀 호출 횟수에 크게 의존적이다.) 예제 2: 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 b n mod m, where m≥2, n≥0, and 1≤b<m. 3.5 Recursive Algorithms

4 Discrete Mathematics by Yang-Sae Moon Page 4 Modular Exponentiation Algorithm #1 Uses the fact that b n = b·b n−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 b n mod m.} if n=0 then return 1 else return (b·mpower(b,n−1,m)) mod m

5 Discrete Mathematics by Yang-Sae Moon Page 5 Modular Exponentiation Algorithm #2 Uses the fact that b 2k = b k·2 = (b k ) 2. 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

6 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

7 Discrete Mathematics by Yang-Sae Moon Page 7 Recursive Euclid’s Algorithm ( 예제 4) 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,b  N) if a = 0 then return b else return gcd(b mod a, a)

8 Discrete Mathematics by Yang-Sae Moon Page 8 Recursion vs. Iteration (1/3) 3.5 Recursive Algorithms Factorial – Recursion procedure factorial(n  N) if n = 1 then return n else return n  factorial(n – 1) Factorial – Iteration procedure factorial(n  N) x := 1 for i := 1 to n x := i  x return x

9 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 (factorial(n–1) + factorial(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

10 Discrete Mathematics by Yang-Sae Moon Page 10 3.5 Recursive Algorithms 재귀 (recursion) 는 프로그램을 간단히 하고, 이해하기가 쉬 운 장점이 있는 반면에, 각 호출이 스택을 사용하므로, Depth 가 너무 깊어지지 않도 록 조심스럽게 프로그래밍해야 함 컴퓨터에게 보다 적합한 방법은 반복 (iteration) 을 사용한 프 로그래밍이나, 적당한 범위에서 재귀를 사용하는 것이 바람 직함 Recursion vs. Iteration (3/3)

11 Discrete Mathematics by Yang-Sae Moon Page 11 Merge Sort ( 예제 8) (1/2) The merge takes (n) steps, and merge-sort takes (n log n). 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

12 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 L k := B j ; j := j + 1 else if j=|B| then L k := A i ; i := i + 1 else if A i < B j then L k := A i ; i := i + 1 else L k := B j ; j := j + 1 k := k+1 return L Merge Sort ( 예제 8) (2/2)

13 Discrete Mathematics by Yang-Sae Moon Page 13 Homework #5 $3.1 의 연습문제 : 1, 3, 32 A hint for 32: prove it by cases (n = 2k and n = 2k + 1) $3.2 의 연습문제 : 2(c,d), 9(d,f), 18(b,d) $3.3 의 연습문제 : 3, 8, 15 $3.4 의 연습문제 : 2(a,c), 8(b) $3.5 의 연습문제 : 2, 4 Due Date: 3.5 Recursive Algorithms


Download ppt "이산수학 (Discrete Mathematics) 3.5 재귀 알고리즘 (Recursive Algorithms) 2006 년 봄학기 문양세 강원대학교 컴퓨터과학과."

Similar presentations


Ads by Google