CS510 - Design and Analysis of Algorithms
Course Description:
This is a graduate-level course on the design and analysis of algorithms.
After a quick review of basic algorithm design techniques such as divide-and-conquer,
greedy algorithms, and dynamic programming, the course covers introductory complexity
theory and advanced topics in algorithms such as network flows, randomized algorithms,
approximation algorithms, and linear programming.
Prerequisites:
- An undergraduate course in Discrete Mathematics, Data Structures, Algorithms and Probability.
- Strong problem solving skills and some background in programming.
Textbook(s)/Supplementary Readings:
- Algorithm Design
Lectures:
Topic | Slides | Notes | Problem Sets | |
---|---|---|---|---|
Algorithmic Thinking
|
Slides | Notes | ||
Asymptotic Analysis
|
Slides Slides Slides |
Notes | PS | |
Design Paradigm: Divide and Conquer
|
Slides Slides Slides |
Notes |
PS | |
Single Source Shortest Path
|
Slides Slides Slides Slides |
Notes | PS | |
Prim's Algorithm
|
Slides Slides Slides Slides Slides |
Notes | PS | |
Kruskal's Algorithm
|
Slides Slides Slides |
Notes | ||
Dynamic Programming
|
Slides | Notes | PS | |
Weighted Independent Sets
|
Slides Slides Slides Slides |
|||
The Knapsack Problem
|
Slides Slides Slides Slides |
|||
Sequence Alignment
|
Slides Slides Slides |
|||
Matrix Chain Multiplication
|
||||
Intractable Problems
|
Slides Slides Slides Slides Slides Slides Slides |
|||
Polynomial Time Reduction
|
Slides Slides Slides Slides Slides Slides Slides Slides |
Notes | PS | |
Classes of Problems
|
Slides Slides Slides Slides Slides Slides |
|||
Proving NP-Complete Problems
|
Slides |
|||
Coping with NP-Hardness
|
Slides Slides Slides Slides Slides Slides |
Notes | ||
Approximation Algorithms
|
Slides Slides Slides Slides Slides Slides Slides |
Notes | PS | |
Randomized Algorithms
|
Slides Slides Slides Slides Slides Slides Slides Slides Slides |
Notes | PS | |
Local Search
|
Slides |
Notes |
Homeworks
- In this homework, we will develop our concepts for divide and conquer based algorithms for sorting an array of n numbers. [Homework]
- With this homework, we will develop a divide and conquer based algorithm for the general problem of selection of an order statistics of an array. [Homework]
- Homework-3 is specially designed for thoroughly understanding the concepts of Bipartite-Graph and matching. We will develop a combinatorial algorithm for matching in Bipartite-Graphs. This is a classic combinatorial optimization problem with many applications. The algorithm is very simple and simply beautiful. [Homework]
- With this set of problems, we will develop algorithms for All-Pairs Shortest Paths (APSP) in graphs. [Homework]