Review for Midterm
You should understand the following basic algorithmic types:
- Greedy Algorithms
- Divide and Conquer
- Dynamic programming
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):
- T(n)=aT(n/b)+g(n)
- T(n)=T(n-1)+g(n)
You should be able to do (by hand) the following:
- The Union/Find algorithm
- Solve (small) problems from the "marriage" problem
- Prim and Kruskal's algorithm for the minimum spanning tree
- Find a (small) optimal
matrix multiply or a (small) optimal binary search tree.
- Do (small) FFT's.
- Be familiar with how to use Maps to implement graphs.
As always, books, notes, listings of programs, ... are all allowed.
Only other humans are forbidden. Calculators will be little use, I
think.