Course Description
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: run-time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course may have a few programming assignments, it is primarily not a programming course. Instead, it will focus on the desing and analysis of algorithms for general classes of problems. This course is not open to Computer Science graduate students, who should consider taking 15-651 instead.[p>
Cross-listed numbers
- 02-613: for MSBIC or MSCB program graduate students.
- 15-650: for any other graduate students
- 15-351: for undergraduates
All the courses have the same structure, lectures, TAs, etc. There may be additional assignments and exam questions for students signed up under one of the graduate numbers. The grading curve will be computed separately in each of the three courses.
Schedule
Mondays, Wednesdays, and Fridays 9-9:50am.
Doberty Hall 2315
The first lecture will be on Monday, August 28.
A non-exhaustive set of topics we tentatively plan on covering are as follows:
- Minimum spanning trees
- Asymptotic analysis
- Graph traversals
- Topological sort
- Shortest paths
- Suffix trees/arrays
- Dynamic programming
- String alignment (genomics)
- Network flow
- Amortized analysis
- Splay trees
- Linear programming
- NP-hardness
- Approximation algorithms
- Hashing
- Probabilistic sketching
- Minimum cut
- Closest pair of points
Here is the rough schedule and prelecture notes (gratefully based off Carl Kingsford's excellent materials; all errors are mine):
- 2023-08-28: Lec0: Introduction. KT 1
- 2023-08-28: Lec1: Minimum spanning trees and Prim's algorithm. KT 3.1, 4.5, 4.7
- 2023-08-30: Lec2: Kruskal and Union-Find. KT 4.5-4.6
- 2023-09-01: Lec3: data structures, union-find, heap. KT, 4.6, 2.5
- 2023-09-04: Labor day; no classes
- 2023-09-06: Lec4: heaps and MST clustering. KT 2.5, 4.7
- 2023-09-08: Lec5: asymptotic analysis. KT 2.1-2.2. HW1 due.
- 2023-09-11: Lec6a and Lec6b: graph traversal (BFS, DFS) and applications (bipartite graph, topological sort). KT Ch. 3.
- 2023-09-13 Lec7: approximation algorithms; approx Euclidean TSP
- 2023-09-15 Lec8: minimum spanning arborescence. KT 4.9
- 2023-09-18: Lec9: Shortest weighted path via Dijkstra. KT 4.4. HW2 due.
- 2023-09-20: Lec10: A* search and admissibile heuristics.
- 2023-09-22: Lec11: Bellman-Ford negative shortest path. KT 6.8.
- 2023-09-25: Lec12: Divide and conquer + closest points. KT 5.4
- 2023-09-27: Lec13: Skip Lists and randomized data structures.HW3 due
- 2023-09-29: Lec14: Divide and conquer for numerics: Karatsuba and Strassen
- 2023-10-02: Lec15: Binary search trees
- 2023-10-04: Midterm 1
- 2023-10-06: Lec16: Splay trees and amortized analysis
- 2023-10-09: Splay trees continued.
- 2023-10-11: Lec17: (a,b)-trees and B-trees. HW4 due
- 2023-10-13: B-trees continued.
- 2023-10-16 to 2023-10-20: Fall Break; no classes
- 2023-10-23: Lec18: suffix tries and suffix trees.
- 2023-10-25: Lec19: generalized suffix trees and suffix arrays
- 2023-10-27: Lec20: subset sum and knapsack (DP examples). KT 6.4
- 2023-10-30: Lec21: sequence alignment and RNA folding. KT 6.5, 6.8. HW5 due
- 2023-11-01: Lec22: network flow. min-cut max-flow. KT 7.1
- 2023-11-03: lec23: generalizations of max flow, bipartite matching, reductions. KT 7.5-7.7
- 2023-11-06: Lec24: more examples of DP and network flow problems. HW6 due
- 2023-11-08: Midterm 2
- 2023-11-10: Lec25: linear programming (and a tiny intro to integer linear programming)
- 2023-11-13: Lec26: simplex method
- 2023-11-15: Lec27: NP-hardness. KT Chapter 8.
- 2023-11-17: Lec 27 continued. More HP-hardness, vertex cover, independent set, set cover
- 2023-11-20: Lec28: 3SAT, Hamiltonian path/cycle, more reductions
- 2023-11-22 to 2023-11-24: Thanksgiving; no classes
- 2023-11-27: Continuation of Lec 28, including Traveling Salesman.
- 2023-11-29: Lec29: approximation algorithms for vertex cover and minimizing makespan
- 2023-12-01: Lec30: hash functions. HW7 due
- 2023-12-04: Lec31: count distinct sketch and MinHash
- 2023-12-06: continuation of count distinct sketch and MinHash
- 2023-12-08: Lec32: Some fun examples of NP-hardness. Video games and Olympic sports routines. HW8 due
- 2023-12-13, 2-4pm: Office Hours
- 2023-12-15, 5:30-8:30pm: Final Exam @ DH 2210
Office Hours and Contact Info
TA office hours to-be-determined
Piazza: https://piazza.com/cmu/fall2023/026131535115650/home
We strongly encourage contacting course staff via Piazza (you may post to instructors only); we cannot guarantee a timely response for any other medium.
If you have an issue that you wish to raise to just the professor (for example, a complaint about a TA), you may email directly to ywyu@cmu or yuny@andrew. However, any other general course-related correspondence should be via Piazza.
Homework
Homework will be approximately weekly. Every homework can be submitted up to 24 hours late for a 20% penalty. No other late homeworks will be accepted. Homework must be handwritten and submitted online (either scanned or written on a tablet).
Solutions should be as short, clear, and concise as possible. We will be taking marks off
for long, meandering solutions to otherwise short problems, even if all of the reasoning is technically
correct. Brevity is the soul of wit.
More details about submitting homework to come.