CMSC 150 RECURSION 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: ~ 2 2L if L = 250, this is ~ alignments 1B alignments / second, takes 3.21 X years age of universe: ~1.4 X 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: ~ 2 2L if L = 250, this is ~ alignments 1B alignments / second, takes 3.21 X years age of universe: ~1.4 X 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 f n be the n th term, n = 0, 1, 2… 0if n = 0 f n =1if n = 1 f n-1 + f n-2 if n > 1
Another Example : Fibonacci Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … 0if n = 0 f n =1if n = 1 f n-1 + f n-2 if n > 1 f 0 = 0f 1 = 1 f 2 = f 1 + f 0 = = 1 f 3 = f 2 + f 1 = = 2 f 4 = f 3 + f 2 = = 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 natureFibonacci in nature
Compute n th 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 1 st tower to 3 rd 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
Think Recursively n n - 1 In pseudocode: moveTower( n-1, 1, 2 ); moveDisk( 1, 3 ); moveTower( n-1, 2, 3 ); Note that we do not explicitly implement the steps for a tower of size n-1
Solve Towers in BlueJ…