In this week, we're going to complete our discussion of the read alignment problem, by discussing dynamic programming algorithms for edit distance, and then some variations on these algorithms, that solve some very useful general sequence similarity problems. Dynamic programming algorithms will also allow us to look for approximate occurrences of a pattern in a text, including occurrences with insertions and with deletions. And they'll allow us to calculate flexible string similarities with penalties that can be configured to suit the biological setting. They'll also allow to find similar substrings between strings, and that's a crucial problem solved by many biosequence analysis tools, including popular tools like Blast. Once we've finished our read alignment discussion it's time to move on to a different and challenging problem called genome assembly. How do we assemble a genome from scratch, when we've never seen a genome like it before, and therefore, we can't use our trick of being able to look at the reference genome? This is the problem that the Human Genome Project had to solve with respect to the human genome. And it's an incredibly hard problem. So in this module, we'll begin to discuss the computational principles that give us the glue we need to put these genomic puzzles back together.