Asymptotics, representation of input and input size,
polynomial vs exponential running time, decision, search
and optimization problems

Basic numeric algorithms
- addition, subtraction, multiplication of n-bit numbers

Graphs
- basics, adjacency lists vs matrix,
- undirected vs directed, paths, cycles, walks
- basic search for reachability
- DFS, BFS, properties
- DAGs, properties (sinks, sources), topological sort
- linear time algorithms to check various reachability properties etc.
- strong connected components, meta graph, knowledge that meta graph
  can be constructed via a linear time algorithm

Single-source shortest path algorithms
- definitions
- BFS and Dijkstra's algorithm for non-negative lengths
- shortest path trees
- Negative length edges and generic algorithm
- Bellman-Ford algorithm for negative cycle detection and
  shortest paths with negative length edges
- Linear time algorithm for shortest paths in DAGs with negative lengths

Recursion
- recursive algorithms
- recurrences and ability to solve them asymptotically via
  unfolding, recursion trees, guess and verify
- Divide and conquer technique
- Binary search

Sorting and selection
- Algorithms for sorting
- Linear time algorithm for selection and medians