CS 519-010, Algorithms (MS/MEng-Level), Winter 2018

Coordinates TR, 10-11:20am, GLSN 200 [Registrar] [Canvas]
Instructor Liang Huang
TAs He Zhang (zhangh7@) and Yilin Yang (yangyil@)
Office hours Liang: T/Th, 11:25-11:55am (KEC 2069); TAs: M/T/Th/F, 4-5pm (KEC Atrium).
Textbooks [CLRS] Introduction to Algorithms, 3rd or 2nd edi. (default reference).
[KT] Kleinberg and Tardos, Algorithm Design (DP chapter online, all slides online)
[DPV] Dasgupta, Papadimitriou, and Vazirani (DPV). Algorithms (full text online via berkeley)
[E] Jeff Erickson. Algorithms, Etc. (full text online)
How to Think Like a Computer Scientist: Learning Python (full text online)
Grading (tentative) midterm: 20%, final: 25%, three quizzes: 7x3=21%;
weekly homework: 3x10=30%, class participation: 4%.
any complete HW submission automatically gets 2%.
the other 1% is based on blackbox testing of the specified coding problem.
no late submission is accepted.
Grading Curve: A/A-: 40-45%, B+/B/B-: 45-50%, the rest is C+/C/C- (very rare).
Intended Audience
  • This course is generally designed for MS/MEng students in CS.
  • All CS graduate students (MS/MEng/PhD) who have not taken an undergraduate algorithms class (equivalent to our CS 325) should take this class instead of the PhD-level CS 515 or the undergraduate-level CS 325.
  • PhD students who have taken undergraduate algorithms should take CS 515 instead.
  • MS/MEng students who have taken undergraduate algorithms should by default take this class, unless they find it too basic.
  • This course counts as a Theory course for MS/MEng students, and will have a regular course number (CS 51x) in the near future.
  • Other students (EE, Stats, Robotics, etc) who are interested in algorithms or seeking a job with top software firms are also welcome. This course aims at the level of Google/Facebook coding interviews.
  • Students are assumed to be familiar with Data Structures and fluent in at least one mainstream language (C/C++, Java, Python). We'll start with a brief review of Data Structures integrated with a Python tutorial.
Other Policies For technical questions, come to office hours. Otherwise you can raise a question on Canvas.
(answering other people's questions correctly will be rewarded for class participation).
For grading questions, come to office hours. Do not email us unless you have a personal issue.


The purpose of this course is six-fold:

Topics Covered

  1. Python Tutorial, Review of Basic Data Structures, Sorting and Selection
    (divide-n-conquer, quicksort/quickselect, mergesort, BSTs, memoization, heaps and heapsort, priority queue, hashing, hashed heap, etc.)
  2. Basic Complexity Analysis (Master equation, tree method, amortization, etc.)
  3. Dynamic Programming (DP)
  4. Graph Algorithms: BFS/DFS, topolsort, Dijkstra, Prim, Kruskal

Detailed Schedule and Materials

1 (Tue) Admin
Python Tutorial (first 5 pages)
quicksort, BST, quickselect
(Thu) mergesort, two-pointers, stable sort
(qselect, qsort->bst)
2 (Tue) divide-n-conquer: number of inversions
longest path in binary tree
brief discussions of HW1
(Thu) k numbers closest to input query, unsorted
quiz1 and discussions
(msort, inv, longest)
Thu: Quiz 1
(covers HW1)
3 (Tue) hand out graded quiz1
insertion sort can be made O(nlogn) by balanced BST
discussions of HW2:
qsort with randomized pivot made stable by 3-way partition
selection sort (in-place) is not stable
generic way to stablize sort: decorate-sort-undecorate
mergesort implementation: mergesorted(a[1:], b) is O(n^2)
k numbers closest to input query, unsorted
(Thu) Priority Queue; heap; bubble-up/bubble-down
(k-closest, two pointers)
4 (Tue) brief discussions of HW3
heapify is O(n)
Python heapq tutorial
heapq bubble-down follows Knuth (vol.3) and different from textbooks
k-way mergesort
data stream
(Thu) quiz2 and discussions
(priority queues; baby Dijkstra)
Thu: Quiz 2
(covers HWs1-3/quiz1)
5 (Tue) handout Quiz2
DP 101: Fibonacci, memoization, bitstrings, max. indep. set [slides]
(Thu) discussions of HW4
cache=None instead of cache={}
(DP I: memoized Fibonacci, # of BSTs, # of bistrings)
6 (Tue) Knapsack: unbounded and 0-1
(Thu) Knapsack: bounded
Discussions for HW5
(DP II: knapsack, unbounded and bounded)
7 (Tue) Midterm Review Solutions
Discussions of HW6
(Thu) Midterm
8 (Tue) Discussions of Midterm solutions
topological sort (BFS-style)
sparse and dense graphs
(Thu) Viterbi; Dijkstra
(DP III: LIS, Topol, Viterbi)
9 (Tue) Discussions of HW9; TSP (Edmonds-Karp)
(Thu) TSP cont'd.; CKY: RNA structure
(Dijkstra, TSP)
10 (Tue) Discussions of HW9
counting RNA structures; k-best RNA structure
(Thu) review problems
HW10: Challenge (RNA structure)
11 FINAL Thu 3/22 6pm
same room


The last two are different from the rest in the sense that they ask you to submit your output to given testcases rather than programs (so that you can code in any language, and their online judge system is as easy as a diff). There are many other online judge systems that do not support Python (traditionally ACM/ICPC uses C/C++/Java/Pascal), such as the classical uva (Universidad de Valladolid), poj (Peking University), tju, hit, hust, bjtu, etc. (almost all major Chinese universities run their own online judge systems); you can hone your C/C++/Java skills there if you have extra time. Thanks to my former intern Zhuoran Yu for compiling this list.

To prepare for coding interviews, you have to practice on some of the above (say, solving at least 20 problems on codeforces, with at least two from each topic). To prepare for ACM/ICPC, you have to practice a lot (solving at least 100 problems on zoj/poj).

For another MS/MEng-level algorithms class I taught before (at USC), see here (with lots of complexity analysis).

Liang Huang
Last modified: Wed Jan 18 23:31:27 PST 2012