Bioinformatics is the study of biological information through computer modeling or analysis. Its goal is to reveal relationships between sequences, structures, and functions of molecules. In this course, we intend to give an in-depth introduction of the algorithmic techniques used in bioinformatics. Topics which will be covered include sequence similarity analysis, suffix tree, genome analysis, biological database search, phylogenetic analysis, protein structure manipulation and modeling. This course is designed for undergraduate CS students and assumes no prior knowledge of molecular biology beyond the high school level. Basic concepts of molecular biology will be given in the first lecture, as well as in subsequent lectures before the computational problems are defined. The ultimate goal of this course is to prepare students with the knowledge and skills to conduct research in the area of bioinformatics.