AL. Algorithms and Complexity (31 core hours)
AL1. Basic algorithmic analysis (core -- 4 hours)
Asymptotic analysis of upper and average complexity bounds
Identifying differences among best, average, and worst case behaviors
Big "O" and little "o" notation
Standard complexity classes
Time and space tradeoffs in algorithms
Using recurrence relations to analyze recursive algorithms
AL2. Algorithmic strategies (core -- 6 hours)
Brute-force algorithms
Greedy algorithms
Divide-and-conquer
Backtracking
Branch-and-bound
Heuristics
Pattern matching and string/text algorithms
Numerical approximation algorithms
AL3. Fundamental computing algorithms (core -- 12 hours)
Simple numerical algorithms
Sequential and binary search algorithms
Quadratic sorting algorithms (selection, insertion)
O(N log N) sorting algorithms (Quicksort, heapsort, mergesort)
Hash tables, including collision-avoidance strategies
Binary search trees
Representations of graphs (adjacency list, adjacency matrix)
Depth- and breadth-first traversals
Shortest-path algorithms (Dijkstra's and Floyd's algorithms)
Transitive closure (Floyd's algorithm)
Minimum spanning tree (Prim's and Kruskal's algorithms)
Topological sort
AL4. Distributed algorithms (core -- 3 hours)
Consensus and election
Termination detection
Fault tolerance
Stabilization
AL5. Basic computability theory (core -- 6 hours)
Finite-state machines
Context-free grammars
Uncomputable functions
The halting problem
Implications of uncomputability
AL6. The complexity classes P and NP
Tractable and intractable problems
Definition of the classes P and NP
NP-completeness (Cook's theorem)
Standard NP-complete problems
Reduction techniques
AL7. Automata theory
Deterministic finite automata (DFAs)
Nondeterministic finite automata (NFAs)
Equivalence of DFAs and NFAs
Regular expressions
The pumping lemma for regular expressions
Push-down automata (PDAs)
Relationship of PDAs and context-free grammars
Properties of context-free grammars
Turing machines
Nondeterministic Turing machines
Sets and languages
Chomsky hierarchy
AL8. Advanced algorithmic analysis
Amortized analysis
Online and offline algorithms
Randomized algorithms
Dynamic programming
Combinatorial optimization
AL9. Cryptographic algorithms
Historical overview of cryptography
Private-key cryptography and the key-exchange problem
Public-key cryptography
Digital signatures
Security protocols
Applications (zero-knowledge proofs, authentication, and so on)
AL10. Geometric algorithms
Line segments: properties, intersections
Convex hull finding algorithms