CS310 - Algorithms
Course Description:
This is an undergraduate-level course on the design and analysis of algorithms.
We will cover basic algorithm design techniques such as divide-and-conquer,
greedy algorithms, and dynamic programming. The course also covers introductory complexity
theory and advanced topics in algorithms such as network flows.
Prerequisites:
- Undergraduate courses in Computer Programming, Discrete Mathematics, and Data Structures
Textbook(s)/Supplementary Readings:
- Algorithms
- Algorithm Design
Lectures:
Topic | Slides | Notes | Problem Sets | |
---|---|---|---|---|
Algorithmic Thinking
|
Slides | Notes | ||
Asymptotic Analysis
|
Slides Slides Slides |
Notes | PS | |
Searching and Sorting
|
Slides Slides Slides Slides Slides |
Notes | PS | |
Design Paradigm: Divide and Conquer
|
Slides Slides Slides Slides |
Notes |
PS | |
Graphs and Trees
|
Slides | Notes |
PS | |
Basic Graph Algorithms
|
Slides Slides Slides Slides 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 | ||
Greedy Interval Scheduling
|
Slides Slides Slides |
Notes | PS | |
Greedy Interval Coloring
|
Slides | PS | ||
Huffman Code
|
Slides Slides Slides Slides Slides |
Notes | ||
Dynamic Programming
|
Slides | Notes | PS | |
Weighted Independent Sets
|
Slides Slides Slides Slides |
|||
Weighted Interval Scheduling
|
Slides Slides |
|||
The Knapsack Problem
|
Slides Slides Slides Slides |
|||
Sequence Alignment
|
Slides Slides Slides |
|||
Single Source Shortest Paths Problem
|
Slides Slides Slides |
|||
Floyd-Warshall Algorithm
|
Slides Slides Slides |
|||
Network Flow
|
Slides Slides Slides Slides Slides Slides Slides |
Notes | PS | |
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 |
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]