Você está na página 1de 31

CSCE 310: Data Structures & Algorithms

Recursive Algorithm Analysis

Dr. Ying Lu
ylu@cse.unl.edu
September 8, 2010

1
CSCE 310: 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

2
Example: a recursive algorithm

 Algorithm:
if n=0 then F(n) := 1
else F(n) := F(n-1) * n
return F(n)

3
Example: another recursive algorithm

Algorithm F(n)
// Compute the nth Fibonacci number recursively
//Input: A nonnegative integer n
//Output: the nth Fibonacci number
if n  1 return n
else return F(n-1) + F(n-2)

4
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): number of multiplications to compute n!


 Could we establish a recurrence relation for
deriving M(n)?

5
Example: recursive evaluation of n !
 M(n) = M(n-1) + 1 for n > 0

 A recurrence relation is an equation or


inequality that describes a function in terms
of its value on smaller inputs

 Explicit formula for the sequence (e.g. M(n))


in terms of n only

6
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) = ?

7
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)?
8
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


estimate the order of magnitude of the solution (see
Appendix B)
9
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

n disks
A C
10
EXAMPLE: tower of hanoi

 Step 1: Solve simple case when n<=1?


Just trivial

B B

A C A C

Move(A, C)

11
EXAMPLE: tower of hanoi

 Step 2: Assume that a smaller instance can be


solved, i.e. can move n-1 disks. Then?

B
A C

A C

A C 12
EXAMPLE: tower of hanoi

B
A C

A C
B

A C

13
A C
EXAMPLE: tower of hanoi

B
A C

A C
B

TOWER(n, A, B, C)
A C

14
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

B TOWER(n-1, B, A, C)

15
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)
}

16
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?

17
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?

18
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)

19
In-Class Exercise
 P. 76 Problem 2.4.1 (c): solve this recurrence relation:
x(n) = x(n-1) + n
 P. 76 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.

20
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

21
Smoothness rule

If T(n)  (f(n))
for values of n that are powers of b, where b  2,

then

T(n)  (f(n))

22
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

23
Fibonacci numbers
 The Fibonacci sequence:
0, 1, 1, 2, 3, 5, 8, 13, 21, …

 Fibonacci recurrence:
2nd order linear homogeneous
F(n) = F(n-1) + F(n-2)
recurrence relation
F(0) = 0 with constant coefficients
F(1) = 1

24
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) = a L(n-1) + b L(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 r1n and r2n
 Particular solution: use initial conditions

25
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) = a L(n-1) + b L(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 r1n and r2n
 Particular solution: use initial conditions

 Explicit Formula for Fibonacci Number: F(n) = F(n-1) +F(n-2)

26
Computing Fibonacci numbers
1. Definition based recursive algorithm

Algorithm F(n)
// Compute the nth Fibonacci number recursively
//Input: A nonnegative integer n
//Output: the nth Fibonacci number
if n  1 return n
else return F(n-1) + F(n-2)

27
Computing Fibonacci numbers
2. Nonrecursive brute-force algorithm

Algorithm Fib(n)
// Compute the nth Fibonacci number iteratively
//Input: A nonnegative integer n
//Output: the nth Fibonacci number
F[0]  0; F[1]  1
for i  2 to n do
F[i]  F[i-1] + F[i-2]
return F[n]
28
Computing Fibonacci numbers

3. Explicit formula algorithm

1 1 5 n
F (n)  ( ) rounded to the nearest integer
5 2
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


29
In-Class Exercises
 Another example:
A(n) = 3A(n-1) – 2A(n-2) A(0) = 1 A(1) = 3

 P.83 2.5.4. 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.)

30
Announcement
 Reading List of this Week
• Chapter 3

Você também pode gostar