Review for Midterm

You should understand the following basic algorithmic types:

  1. Greedy Algorithms
  2. Divide and Conquer
  3. Dynamic programming
  4. Backtracking

You should be able to analyze algorithms. In particular, you should be able to find the order of execution of a piece of program code. As part of that, you should know how to determine the order of execution from simple "loop" programs and to solve the following kinds of recurrences (and recognize how you get these recurrences from programs):

  1. T(n)=3T(n-1)+T(n-2)
  2. T(n)=aT(n/b)+g(n)
  3. T(n)=T(n-1)+g(n)

You should be able to do (by hand) the following:

  1. The Union/Find algorithm
  2. Solve (small) problems from the "marriage" problem
  3. Prim and Kruskal's algorithm for the minimum spanning tree
  4. Find a (small) optimal matrix multiply or a (small) optimal binary search tree.
  5. Do (small) FFT's.
  6. Be familiar with how to use Maps to implement graphs.
  7. A (very small) N-queens problem. (I.e., 4x4 or less.)

As always, books, notes, listings of programs, ... are all allowed. Only other humans are forbidden. Calculators will be little use, I think.