This class is ultimately about learning two skills that are crucial
for computer scientists: how to think about algorithms and how to talk
about algorithms. Along the way, you’ll pick up a bunch of algorithmic
facts—mergesort runs in O(n log n) time; the amortized time to search in
a splay tree is O(log n); greedy algorithms usually don’t produce
optimal solutions; the traveling salesman problem is NP-hard—but these
aren’t the point of the course. You can
always look up mere facts in a textbook or on the web, provided you have
enough intuition and experience to know what to look for. That’s why we
let you bring cheat sheets to the exams; we don’t want you wasting your
study time trying to memorize all the facts you’ve seen. You’ll also
practice a lot of algorithm design and analysis skills—finding useful
(counter)examples, developing induction proofs, solving recurrences,
using big-Oh notation, using probability, giving problems crisp
mathematical descriptions, and so on. These skills are very useful, but
they aren’t really the point of the course either. At this point in your
educational career, you should be able to pick up those skills on your
own, once you know what you’re trying to do.
Download link
-Cover Material
Lecture Note
Home works and exam
Download link
-Cover Material
Lecture Note
Home works and exam