270 likes | 370 Views
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
E N D
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: 1 if n = 0 n! =n(n-1)! if n > 0
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 = 0 fn=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
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 • Consider the n-tower as a tower of n-1 and a tower of 1… n - 1 n
Think Recursively • If we can somehow move the n-1 tower to the middle… n - 1
Think Recursively • And then the largest disk to the right… n - 1
Think Recursively • And finally the n-1 tower to the right, we have a solution! n - 1
Think Recursively • What is the base case? • a tower of n = 1 disk
Think Recursively • What is the recursive step? • Move n-1 tower to middle • Then largest disk to right • Then n-1 tower from middle to right 3 1 n - 1 n 2
Think Recursively • In pseudocode: • moveTower( n-1, 1, 2 ); • moveDisk( 1, 3 ); • moveTower( n-1, 2, 3 ); 3 1 n - 1 n 2 Note that we do not explicitly implement the steps for a tower of size n-1