This course is an advanced course on algorithms which builds on top of an introductory course on algorithms and data structures. The course focuses on advanced techniques for identifying and solving computationally hard problems and on how to adapt such techniques to real-world scenarios.