Comp. Sci. 311 Study Guide for Second Test Fall, 2008

As you know, the second test will be Wednesday, Nov. 12 from 7:15 to 8:45 in the evening in Hasbrouck 134. There will be no class at the regular time that day. Creidieki will hold a review session on Monday afternoon, Nov. 10, from 3:45 to 4:45 pm in the Computer Science Building, Room 140.

The test is closed book and closed notes, with no calculators, computers, cell phones, etc. allowed. This is because I want you to understand the material beforehand.

I try hard to make my exams like my problem sets only much easier because they are closed book and there is a rather short limit on time.

To study for the test, I urge you to do the following:

  1. Go over the homeworks 5 through 8, and their model solutions, making sure that you now understand all of these! I will hand out model solutions to homework 8 at the discussion section on Thursday, Nov. 6, and no late homework 8 will be accepted after that.

  2. Go over your notes from the lectures 8 (Sept. 25) through 15 (Oct. 30), and the corresponding readings. In particular, we studied a bunch of topics and algorithms that I expect you to be comfortable and familiar with. Below is a list of the topics and algorithms that I have in mind. However, please understand that I still expect you to be familiar with what we did before, e.g, asymptotic analysis and divide and conquer.

  3. Relax and get a good night's sleep before taking the test.

Main Topics Covered

  1. Graphs and their data structures and algorithms.

  2. Union/Find

  3. Greedy Algorithms.

  4. Dynamic Programming.

Main Algorithms Studied

  1. Breadth First Search and its applications.

  2. Depth First Search and its many applications.

  3. Dijkstra's Algorithm: note we gave O(n2) and O((n+m)log n) implementations.

  4. Prim's MST Algorithm: note we gave O(n2) and O((n+m)log n) implementations.

  5. Kruskal's MST Algorithm and the Union-Find data structure.

  6. Huffman Greedy Coding Algorithm.

  7. Dynamic Programming Algorithms including:
    1. Longest Increasing Subsequence
    2. Edit Distance
    3. Knapsack
    4. Warshall (transitive closure) and Floyd (all pairs min weight path) Algorithms.

Reminder: when I ask you on the test to come up with an algorithm, I will want you to use things we have learned to build an algorithm to solve the problem. If it makes sense to use a data structure and/or algorithm that we have studied, then you can just quote it by name and state its running time -- you do not have to write its pseudo-code.

The most important thing is that you do the following:

  1. Clearly describe a correct algorithm;
  2. Explain why your algorithm is correct;
  3. Analyze your algorithm, i.e., compute its asymptotic running time
Even if you can't get the absolute fastest possible algorithm, I will be generous with partial credit if you successfully complete the above steps.