360 likes | 512 Views
RAIK 283: Data Structures & Algorithms. Recursive Algorithm Analysis Dr. Ying Lu ylu@cse.unl.edu. September 13, 2012. RAIK 283: Data Structures & Algorithms. Giving credit where credit is due: Most of the lecture notes are based on the slides from the Textbook’s companion website
E N D
RAIK 283: Data Structures & Algorithms Recursive Algorithm Analysis Dr. Ying Lu ylu@cse.unl.edu September 13, 2012
RAIK 283: Data Structures & Algorithms • Giving credit where credit is due: • Most of the lecture notes are based on the slides from the Textbook’s companion website http://www.aw-bc.com/info/levitin • Several slides are from Hsu Wen Jing of the National University of Singapore • I have modified them and added new slides
Example: a recursive algorithm • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n)
Example: another recursive algorithm Algorithm F(n) // Compute the nthFibonacci number recursively //Input: A nonnegative integer n //Output: the nthFibonacci number if n 1 return n else return F(n-1) + F(n-2)
Recurrence Relation • Recurrence Relation
Recurrence Relation • Recurrence Relation: an equation or inequality that describes a function in terms of its value on smaller inputs
Example: a recursive algorithm • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • What does this algorithm compute?
Example: a recursive algorithm • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • What does this algorithm compute? • What’s the basic operation of this algorithm?
Example: recursive evaluation of n ! • Recursive definition of n!: • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • M(n): number of multiplications to compute n! with this recursive algorithm
Example: recursive evaluation of n ! • Recursive definition of n!: • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • M(n): number of multiplications to compute n! with this recursive algorithm • Could we establish a recurrence relation for deriving M(n)?
Example: recursive evaluation of n ! • Definition: n ! = 1*2*…*(n-1)*n • Recursive definition of n!: • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • M(n) = M(n-1) + 1 • Initial Condition: M(0) = ?
Example: recursive evaluation of n ! • Recursive definition of n!: • Algorithm: if n=0 then F(n) := 1 else F(n) := F(n-1) * n return F(n) • M(n) = M(n-1) + 1 • Initial condition: M(0) = 0 • Explicit formula for M(n) in terms of n only?
Time efficiency of recursive algorithms Steps in analysis of recursive algorithms: • Decide on parameter n indicating input size • Identify algorithm’s basic operation • Determine worst, average, and best case for inputs of size n • Set up a recurrence relation and initial condition(s) for C(n)-the number of times the basic operation will be executed for an input of size n • Solve the recurrence to obtain a closed form or determine the order of growth of the solution (see Appendix B)
EXAMPLE: tower of hanoi • Problem: • Given three pegs (A, B, C) and n disks of different sizes • Initially, all the disks are on peg A in order of size, the largest on the bottom and the smallest on top • The goal is to move all the disks to peg C using peg B as an auxiliary • Only 1 disk can be moved at a time, and a larger disk cannot be placed on top of a smaller one B n disks A C
EXAMPLE: tower of hanoi • Design a recursive algorithm to solve this problem: • Given three pegs (A, B, C) and n disks of different sizes • Initially, all the disks are on peg A in order of size, the largest on the bottom and the smallest on top • The goal is to move all the disks to peg C using peg B as an auxiliary • Only 1 disk can be moved at a time, and a larger disk cannot be placed on top of a smaller one B n disks A C
EXAMPLE: tower of hanoi • Step 1: Solve simple case when n<=1? Just trivial B B A C A C Move(A, C)
EXAMPLE: tower of hanoi • Step 2: Assume that a smaller instance can be solved, i.e. can move n-1 disks. Then? B B A C A C B A C
EXAMPLE: tower of hanoi B B A C A C B A C B A C
EXAMPLE: tower of hanoi B B A C A C B TOWER(n, A, B, C) A C B A C
EXAMPLE: tower of hanoi B TOWER(n-1, A, C, B) B A C A C B Move(A, C) TOWER(n, A, B, C) A C TOWER(n-1, B, A, C) B A C
EXAMPLE: tower of hanoi TOWER(n, A, B, C) { if n<1 return; TOWER(n-1, A, C, B); Move(A, C); TOWER(n-1, B, A, C) }
EXAMPLE: tower of hanoi TOWER(n, A, B, C) { if n<1 return; TOWER(n-1, A, C, B); Move(A, C); TOWER(n-1, B, A, C) } • Algorithm analysis: • Input size? Basic operation?
EXAMPLE: tower of hanoi TOWER(n, A, B, C) { if n<1 return; TOWER(n-1, A, C, B); Move(A, C); TOWER(n-1, B, A, C) } • Algorithm analysis: • Do we need to differentiate best case, worst case & average case for inputs of size n?
EXAMPLE: tower of hanoi TOWER(n, A, B, C) { if n<1 return; TOWER(n-1, A, C, B); Move(A, C); TOWER(n-1, B, A, C) } • Algorithm analysis: • Set up a recurrence relation and initial condition(s) for C(n)
EXAMPLE: tower of hanoi TOWER(n, A, B, C) { if n<1 return; TOWER(n-1, A, C, B); Move(A, C); TOWER(n-1, B, A, C) } • Algorithm analysis: • C(n) = 2C(n-1)+1
In-Class Exercise • P. 76 Problem 2.4.1 (c): solve this recurrence relation: x(n) = x(n-1) + n for n>0, x(0)=0 • P. 77 Problem 2.4.4: consider the following recursive algorithm: • Algorithm Q(n) // Input: A positive integer n If n = 1 return 1 else return Q(n-1) + 2 * n – 1 • A. Set up a recurrence relation for this function’s values and solve it to determine what this algorithm computes • B. Set up a recurrence relation for the number of multiplications made by this algorithm and solve it. • C. Set up a recurrence relation for the number of additions/subtractions made by this algorithm and solve it.
Example: BinRec(n) Algorithm BinRec(n) //Input: A positive decimal integer n //Output: The number of binary digits in n’s binary representation if n = 1 return 1 else return BinRec( n/2 ) + 1
Smoothness rule If T(n) (f(n)) for values of n that are powers of b, where b 2, then T(n) (f(n))
Example: BinRec(n) Algorithm BinRec(n) //Input: A positive decimal integer n //Output: The number of binary digits in n’s binary representation if n = 1 return 1 else return BinRec( n/2 ) + 1 If C(n) (f(n)) for values of n that are powers of b, where b 2, then C(n) (f(n))
Fibonacci numbers • The Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, … • Fibonacci recurrence: F(n) = F(n-1) + F(n-2) F(0) = 0 F(1) = 1 • 2nd order linear homogeneous recurrence relation • with constant coefficients
Solving linear homogeneous recurrence relations with constant coefficients • Easy first: 1st order LHRRCCs: C(n) = a C(n -1) C(0) = t … Solution: C(n) = t an • Extrapolate to 2nd order L(n) = aL(n-1) + bL(n-2) … A solution?: L(n) = ? • Characteristic equation (quadratic) • Solve to obtain roots r1 and r2 (quadratic formula) • General solution to RR: linear combination of r1nand r2n • Particular solution: use initial conditions
Solving linear homogeneous recurrence relations with constant coefficients • Easy first: 1st order LHRRCCs: C(n) = a C(n -1) C(0) = t … Solution: C(n) = t an • Extrapolate to 2nd order L(n) = aL(n-1) + bL(n-2) … A solution?: L(n) = ? • Characteristic equation (quadratic) • Solve to obtain roots r1 and r2 (quadratic formula) • General solution to RR: linear combination of r1nand r2n • Particular solution: use initial conditions • Explicit Formula for Fibonacci Number: F(n) = F(n-1) +F(n-2)
Computing Fibonacci numbers 1. Definition based recursive algorithm Algorithm F(n) // Compute the nthFibonacci number recursively //Input: A nonnegative integer n //Output: the nthFibonacci number if n 1 return n else return F(n-1) + F(n-2)
Computing Fibonacci numbers 2. Nonrecursive brute-force algorithm Algorithm Fib(n) // Compute the nth Fibonacci number iteratively //Input: A nonnegative integer n //Output: the nthFibonacci number F[0] 0; F[1] 1 for i 2 to n do F[i] F[i-1] + F[i-2] return F[n]
Special care in its implementation: Intermediate results are irrational numbers Their approximations in the computer are accurate enough Final round-off yields a correct result Computing Fibonacci numbers 3. Explicit formula algorithm
In-Class Exercises • What is the explicit formula for A(n)? A(n) = 3A(n-1) – 2A(n-2) A(0) = 1 A(1) = 3 • P.83 2.5.3. Climbing stairs: Find the number of different ways to climb an n-stair stair-case if each step is either one or two stairs. (For example, a 3-stair staircase can be climbed three ways: 1-1-1, 1-2, and 2-1.)