This course provides an introduction to the fundamental data structures and algorithms underlying many parts of Bioinformatics. Students will explore standard data structures for efficient indexing and sequence search, including the suffix array and the FM-index, as will alignment-free methods for sequence comparison. This course will also introduce the fundamental algorithms in computational phylogenomics and biological network analysis. Finally, students will examine bioinformatics oriented applications of classic unsupervised learning algorithms (e.g., clustering and dimensionality reduction) and database techniques (e.g., sorting, selection, joining). The focus will be both on formal understanding of computational efficiency as well as the practical applications of these concepts.