This course provides an overview of the different subject areas within algorithms, including a sampling of material on exact, approximation, geometric, and randomized algorithms and on advanced data structures. As such, the course is the basis of the corresponding master-level courses. The course covers improvements on classical algorithms as well as ways to approach NP-hard problems. These approaches range from understanding "good" algorithms to solve the problem exactly to efficient algorithms that solve the problem approximately, and also to randomized approaches which perform well in expectation. Along the way we will see some interesting data structures that can be leveraged.
By the end of this course participants should have a broad overview of advanced topics concerning algorithms (i.e., regarding exact, approximate, geometric, and randomized computations) as well as some advanced data structures. They should be able to analyze and design algorithms of each type and understand the appropriate use of the data structures.