CMSC 150 recursion
description
Transcript of CMSC 150 recursion
CMSC 150RECURSION
CS 150: Mon 26 Mar 2012
Motivation : Bioinformatics Example A G A C T A G T T A C C G A G A C G T
Want to compare sequences for similarity
Similar sequences: common ancestors? Point mutations Insertions Deletions − − A G A C T A G T T A C
C G A G A C − − G − T − −
Global Alignment Algorithm
Think about brute force
A G A C T A G T T A C C G A G A C G T
Where should gaps go? Enumerate all possible alignments?
Global Alignment Algorithm
Think about brute force
A G A C T A G T T A C C G A G A C G T
For two sequences of length L: # of possible global alignments: ~ 22L
if L = 250, this is ~10149 alignments @ 1B alignments / second, takes 3.21 X 10132
years age of universe: ~1.4 X 1010 years
Global Alignment Algorithm
Think about brute force
A G A C T A G T T A C C G A G A C G T
For two sequences of length L: # of possible global alignments: ~ 22L
if L = 250, this is ~10149 alignments @ 1B alignments / second, takes 3.21 X 10132
years age of universe: ~1.4 X 1010 years
Needleman-Wunsch Algorithm Computes optimal global alignment
Technique: Uses dynamic programming combine optimal solutions from
subproblems number of subproblems must be
(relatively) small
Typically bottom-up: find solution using a recursive series of
simpler solutions
Recursion
Use same algorithm on smaller subproblems
Need: Base case: simplest input possible, solution
immediately available Recursive call: invoke the algorithm on a
smaller set of the input
Without base case, recursion would be infinite!
An Example
Search phone book for a name start in middle: if found, stop otherwise, repeat process in correct “half”
of book
Base case: only one name to search Recursive call: search remaining “half” of
book
Another Example : Factorial
n! = n x (n-1) x (n-2) x … x 2 x 1
5! = 5 x 4 x 3 x 2 x 1 = 120 4! = 4 x 3 x 2 x 1= 24 3! = 3 x 2 x 1 = 6 2! = 2 x 1 = 2 1! = 1 0! = 1 (multiplicative identity)
Another Example : Factorial
n! = n x (n-1) x (n-2) x … x 2 x 1
5! = 5 x 4 x 3 x 2 x 1 = 120 4! = 4 x 3 x 2 x 1= 24 3! = 3 x 2 x 1 = 6 2! = 2 x 1 = 2 1! = 1 0! = 1 (multiplicative identity)
Another Example : Factorial
n! = n x (n-1) x (n-2) x … x 2 x 1
5! = 5 x 4 x 3 x 2 x 1 = 5 x 4! = 120 4! = 4 x 3 x 2 x 1= 24
Another Example : Factorial
n! = n x (n-1) x (n-2) x … x 2 x 1 n! = n x (n-1)!
Defined recursively:
1if n = 0
n! = n(n-1)! if n > 0
Compute n! in BlueJ…
Another Example : Fibonacci Fibonacci sequence:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
After first two, each term is sum of previous two
Defined recursively: Let fn be the nth term, n = 0, 1, 2…0 if n = 0
fn = 1 if n = 1
fn-1 + fn-2 if n > 1
Another Example : Fibonacci Fibonacci sequence:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
0 if n = 0fn = 1 if n = 1
fn-1 + fn-2 if n > 1
f0 = 0 f1 = 1 f2 = f1 + f0 = 1 + 0 = 1 f3 = f2 + f1 = 1 + 1 = 2 f4 = f3 + f2 = 2 + 1 = 3
Fibonacci in Nature
Fibonacci spiral: Fibonacci tiling: squares of sizes 1, 1, 2, 3, 5,
8, 13, 21, 34 Draw circular arc connecting opposite corners
of squares
Fibonacci in Nature
Fibonacci spiral: Fibonacci tiling: squares of sizes 1, 1, 2, 3, 5, 8, 13, 21,
34 Draw circular arc connecting opposite corners of
squares More explanation: Fibonacci in nature
Compute nth Fibonacci in BlueJ…
Another Example : Towers of Hanoi 3 towers, n disks each of different size Rules:
Can move only one disk at a time No larger disk can be on top of smaller disk
Goal: move n-tower from 1st tower to 3rd tower
Think Recursively
n n - 1
Consider the n-tower as a tower of n-1 and a tower of 1…
Think Recursively
n - 1
If we can somehow move the n-1 tower to the middle…
Think Recursively
n - 1
And then the largest disk to the right…
Think Recursively
n - 1
And finally the n-1 tower to the right, we have a solution!
Think Recursively
What is the base case? a tower of n = 1 disk
Think Recursively
n n - 1
What is the recursive step? Move n-1 tower to middle Then largest disk to right Then n-1 tower from middle to right
1
2
3
Think Recursively
n n - 1
In pseudocode: moveTower( n-1, 1, 2
); moveDisk( 1, 3 ); moveTower( n-1, 2, 3
);
1
2
3
Note that we do not explicitly implement
the steps for a tower of size n-1
Solve Towers in BlueJ…