Reference: Basic Math
- Linear Algebra
- Analytic Geometry
- Matrix Decompositions
- Vector Calculus
- Probability and Distribution
- Continuous Optimization
Reference: cme212
- C++ keywords, identifiers and tokens
- Pointers, arrays, strings
- Memory management
- Functions
- Classes and namespaces
- Abstractions
- Templates and STL
- Pair
- vector
- list, forward_list, deque, stack, queue, priority_queue
- set, multiset, map, multimap, Unordered_set, unordered_map
- Inheritance and polymorphism
- Operator overloading
- Encapsulation
- Constructors and destructors
- Parallelism, multithreaded applications and concurrency
- Tools: UNIX, Git, Make, C++
- Introduction to GDB, valgrind, cachegrind (profiling optimization).
Reference: Course252
Textbook: Cormen, Leiserson, Rivest and Stein Introduction to Algorithms, 3rd edition.
- Algorithmic problems:
- Sorting and searching
- Graph algorithms:
- Graph traversal (DFS, BFS) and applications
- Connectivity, strong connectivity, bi-connectivity
- Minimum spanning tree
- Shortest path
- Matchings
- Network flow
- Hard problems:
- Traveling salesman problem
- Longest path, Hamilton cycle
- Boolean circuit satisfiability
- Clique
- Vertex cover
- Algorithm design:
- Divide-and-conquer
- Graph traversal
- Greedy
- Dynamic Programming
- Reductions
- Use of advanced data structures
- Algorithm correctness:
- Proofs and proof techniques (assumptions, basic logic inference and induction)
- Tree and graph properties that make graph algorithms work
- When does the greedy algorithm work?
- Algorithm analysis:
- Time and space complexity
- Asymptotic analysis: Big Oh, Little oh, Theta
- Worst case and average case analysis
- Lower bounds
- Tractable and intractable problems:
- Polynomial time algorithms
- NP-algorithms
- NP-hardness and NP-completeness
- NP-Reductions