Document

advertisement
Mathematical Analysis of
Recursive Algorithms
Design and Analysis of Algorithms
(CS3024)
28/02/2006
CS3024-FAZ
1
Example 1
Algorithm F(n)
// compute n! recursively
// input: a nonnegative integer n
// output: the value of n!
if n = 0 return 1
else return F(n-1)*n
CS3024-FAZ
2
Exp1: Analysis (1)
Input size = n
Formula:
F(n) = F(n-1) * n; n>0
F(0) = 1
The number of multiplication M(n) = M(n-1)
+ 1; n>0
if n = 0 return 1
The call stops when n = 0
M(0) = 0  initial condition
CS3024-FAZ
3
Exp1: Analysis (2)
Solving recurrence relations: Method of
backward substitution
M(n) = M(n-1) + 1
= [M(n-2)+1] + 1 = M(n-2) + 2
= [M(n-3)+1] + 2 = M(n-3) + 3
General formula pattern: M(n)=M(n-i) + i
Initial condition, n=0  i = n:
M(n)= M(n-1)+1 = M(n-2)+2 =…= M(n-n)+n = n
CS3024-FAZ
4
Analyzing Efficiency of
Recursive Algorithms (1)
1. Decide on a parameter(s) indicating an input’s
size
2. Identify the algorithm’s basic operation
(typically, it is located in its inner most loop)
3. Check whether the number of times the basic
operation is executed depends only on the size
of an input. If it also depend on some
additional property, the worst-case, averagecase, and, if necessary, the best-case
efficiencies have to be investigated separately
CS3024-FAZ
5
Analyzing Efficiency of
Recursive Algorithms (2)
4. Set up a recurrence relation, with an
appropriate initial condition, for the
number of times the algorithm’s basic
operation is executed
5. Solve the recurrence or at the least
ascertain(memastikan) the order of
growth of its solution
CS3024-FAZ
6
Example 2: Tower of Hanoi (1)
n disks on different sizes and three pegs
Initially, all disks are on the first peg in
order of size. The largest on the bottom
and the smallest on top
The goal: move all disks to the third peg,
using the second one as an auxiliary
Move only one disk at a time
It is forbidden to place a larger disk on top
of a smaller one
CS3024-FAZ
7
Goal
Initial
Example 2: Tower of Hanoi (2)
CS3024-FAZ
8
Tower of Hanoi:
Recursive Solution (1)
3
1
2
CS3024-FAZ
9
ToH: Recursive Solution (2)
To move n>1 disks from peg 1 to peg 3
(with peg 2 as an auxiliary(alat bantu)):
Move recursively n-1 disk(s) from peg 1 to
peg 2 (with peg 3 as an auxiluiary)
Move the largest disk from peg 1 to peg 3
Move recursively n-1 disk(s) from peg 2 to
peg 3 (with peg 1 as an auxiliary)
CS3024-FAZ
10
Exp2: Analysis (1)
Input’s size = the number of disks = n
Basic operation = moving one disk
The number of moves M(n) depends on n
only: M(n) = M(n-1) + 1 + M(n-1) ; for n>1
Recurrence relation:
M(n) = 2M(n-1) + 1 ; for n>1
M(1) = 1  initial condition
CS3024-FAZ
11
Exp2: Analysis (2)
Backward substitution:
M(n) = 2M(n-1) + 1
= 2[2M(n-2)+1]+1=22M(n-2)+2+1
= 22 [2M(n-3)+1]+2+1=23M(n-3)+22+2+1
= 24M(n-4)+23+22+2+1
The pattern, after i substitution:
M(n) = 2iM(n-i) + 2i-1 + 2i-2 +..+ 2 + 1
= 2iM(n-i) + 2i - 1
CS3024-FAZ
12
Exp2: Analysis (3)
Initial condition, n=1  i=n-1:
M(n) = 2iM(n-i) + 2i - 1
= 2(n-1)M(n-(n-1)) + 2(n-1) -1
= 2(n-1)M(1) + 2(n-1) - 1
= 2(n-1) + 2(n-1) - 1 = 2n - 1
Exponential algorithm!
This is the most efficient algorithm
It is the problem’s intrinsic difficulty that
makes it so computationally difficult
CS3024-FAZ
13
Example 3
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
CS3024-FAZ
14
Exp3: Analysis (1)
The number of additions
A(n) = A(n/2) + 1 ; for n>1
Recursive calls end  n=1, initial condition:
A(1) = 0
The presence of n/2  backward substitution
stumble on values of n that are not powers of 2
<!---Why?--->
CS3024-FAZ
15
Exp3: Analysis (2)
Use smoothness rule: under the very broad
assumptions the order of growth for n=2k ≈ the
order of growth for all values of n
n = 2k :
A(2k) = A(2k-1) + 1 ; for n>1
A(20) = 0
CS3024-FAZ
16
Exp3: Analysis (3)
Use backward substitution:
A(2k) = A(2k-1) + 1
= [A(2k-2) + 1] + 1 = A(2k-2) + 2
= [A(2k-3) + 1] + 2 = A(2k-3) + 3
…
= A(2k-i) + i
…
= A(2k-k) + k = A(1) + k = k
CS3024-FAZ
17
Exp3: Analysis (4)
A(2k) = A(1) + k = k
n = 2k, k = log2 n
A(n) = log2 n  (log n)
The exact solution (more refined formula)
A(n) = log2 n
CS3024-FAZ
18
Exercises
Solve the following recurrence relations:
x(n)=x(n-1)+5 for n>1, x(1)=0
x(n)=3x(n-1)+5 for n>1, x(1)=4
x(n)=x(n-1)+n for n>0, x(0)=0
x(n)=x(n/2)+n for n>1, x(1)=1 (solve for n=2k)
x(n)=x(n/3)+1 for n>1, x(1)=1 (solve for n=3k)
CS3024-FAZ
19
Download