The study of algorithms is, at one level, the study of techniques driven by rigorous formal analysis: divide and conquer, greedy algorithms, recursion, O() notation and the like. At another level, algorithms are about abstraction: what is the core computational structure underlying a problem, and how might we unlock it ?
In this course, we will study algorithms at the level of techniques, and at the level of structure. Formalization, a key step in the practice of using algorithms, will play an important role in this class. Specific topics to be covered include:
With all good must come some bad: and sometimes, the best way to understand the complexity of a problem is to understand how hard it is. To that end, we will also study
But "Aha!" you say, "I want to study BIG DATA", not all this algorithms stuff. Fortunately for you, we will cover some aspects of the most important ideas in big data
Some of these topics can command an entire course of their own; our coverage will emphasize the basics, covering a few of the most common ideas in play.
There will be no official textbook for the class. For the most part, I will use the lecture notes provided by Jeff Erickson. Other material that you might like to consult include
Your performance in the course will be evaluated via (six) homeworks (60%), a final exam (20%), and a final project (20%). The project will require you to read a current research paper in algorithms and deconstruct it.