The data structures course (2IL50) teaches how to store data in memory so that it can be analyzed and manipulated in a provably efficient way. This follow-up course Algorithms focuses on the design and analysis of provably efficient algorithms to solve optimization problems such as finding shortest paths in a network, or comparing the similarity of two strings of DNA. We also study computational complexity theory to prove that some problems cannot be solved efficiently.-