This course introduces computability and computational complexity theory and the theory and practice of basic concepts and techniques in algorithms.
You can find the lecture notes on Canvas.
A list of topics and approximate times follows.
| Topic | Approximate Time | Chapter(s) |
|---|---|---|
| Background | 1 week | Sipser ch0 |
| Regular Languages | 2 week | Sipser ch1 |
| Context-free Languages | 1 week | Sipser ch2 |
| Decidability | 1-2 weeks | Sipser ch3, ch4 |
| Reducibility | 1 week | Sipser ch5 |
| Complexity | 1 week | Sipser ch7 |
| Analyzing Algorithms | 1 week | CLRS ch2 |
| Sorting and Divide and Conquer | 1 week | CLRS ch4, ch6 |
| Greedy | 1 week | CLRS ch16 |
| Dynamic Programming | 1 week | CLRS ch15 |
| Graph Algorithms | 1 week | CLRS ch22-25 |
| Advanced Data Structures | 1 week |
Learning Outcomes:
By the end of the course, the student must be able to:
- Understand the NP-completeness concept
- Explain the P vs. NP problem
- Analyze computation models
- Design a reduction between two computational problems
- Characterize different complexity classes
- Design algorithms for new problems
- Analyze algorithms
