CS 385 Algorithms
Anany Levitin
Introduction to The Design and Analysis of Algorithms
3rd ed., Pearson, 2012
Bjarne Stroustrup
Programming: Principles and Practice Using C++
2nd ed., Addison Wesley, 2014
Introduction, Important problem types, Review of fundamental data structures.
1.1-1.4 Levitin
Sieve of Eratosthenes -- numerical algorithm
Analysis framework; big-O, Theta, Omega; Analysis of non recursive algorithms.
2.1-2.3 Levitin
Unique Letters -- bitwise operations
Analysis of recursive algorithms, Master theorem.
2.4-2.5 and Appendix B Levitin
Stair Climber -- recursive algorithm
Brute force algorithms, Exhaustive search.
3.1-3.4 Levitin
Divide and conquer algorithms;
Review Mergesort, Quicksort, Binary search.
4.1-4.6 Levitin
Inversion Counter -- application of mergesort
Decrease and conquer algorithms;
DFS, BFS, and topological sorting.
5.1-5.5 Levitin
BFS, DFS, topsort -- in-class coding exercise
Instance simplification: presorting, Gauss elimination,
and balanced search trees.
Representation change: Horner's rule and binary exponentiation.
6.1-6.5 Levitin
Space-time tradeoffs: string matching, hashing, red-black
trees, B-trees.
7.2-7.4 Levitin
Implement a red-black tree; Optional: use tree to
find common words in body of text
Dynamic programming: Binomial Coefficients, Floyd and Warshall algorithms,
Knapsack problem, memory functions.
8.1-8.4 Levitin
0-1 knapsack problem
Greedy technique. Prim's algorithm, Kruskal's algorithm,
Dijkstra's algorithm, and Huffman trees.
9.1-9.4 Levitin
Dijkstra's algorithm -- in-class coding exercise
Iterative algorithms. Simplex Method,
Maximum flow through Ford Fulkerson method.
10.1-10.2 Levitin
Lower bound arguments; Decision Trees; P, NP, and NP complete problems.
11.1-11.3 Levitin
Numerical algorithms.
Backtracking, Branch-and-bound.
11.4-12.4 Levitin
Optional: use backtracking to solve a maze and/or
find a Hamiltonian circuit
Approximation algorithms for NP-hard problems.
12.3 Levitin