LecturesThis page contains the order of topics contained in lectures, listed as a sequence of modules. Please note that modules may vary considerably in length and difficulty; please see the schedule for details on timing. Lecture materials are posted on LEARN in various formats, for your convenience. The slides and audio have been joined together into videos; there are also written transcripts of the audio. Please see the resources page for additional relevant material, including a document outlining coverage of the material by the (optional) textbook. Module 1: IntroductionTopics: Introduction, course goals, types of problems, exhaustive search Module 2: Comparing problems and solutionsTopics: Comparing problems, models of computation, pseudocode, asymptotic notation, analyzing algorithms, analyzing exhaustive search Module 3: Greedy approachTopics: Scheduling activities, making change, fractional knapsack, single-source cheapest paths, spanning tree Module 4: Divide-and-conquerTopics: Binary search, sorting, solving recurrence relations, maximum subtotal, matrix multiplication Module 5: Dynamic programmingTopics: Matrix-chain multiplication, longest common subsequence, all-pairs cheapest paths Module 6: Hardness of problemsTopics: Complexity, polynomial time, lower bounds, decision trees, adversary lower bounds, reductions, NP-completeness Module 7: Compromising on speedTopics: Search trees, backtracking, branch and bound, fixed-parameter algorithms, Las Vegas algorithms Module 8: Compromising on correctnessTopics: Approximation algorithms, Monte Carlo algorithms, heuristics |