Test 1 on Chapters 1, 2, 3, and Appendix B is on Thursday (3/4). The test will be closed-book, but you may have one sheet of paper (8.5"x11", front and back) with notes.

For the test, you should:

1) understand the concept of big-oh, theta, and omega notation. I will not ask you to find the constants c and N to prove a function satisfies one of the definitions, but you should have a good feel for the usage and meaning of these notations. (e.g., If you buy a computer that is 1000 times faster, how big a problem can you solve in one minute....)

2) understand the general concept of the divide-and-conquer and dynamic programming problem-solving techniques.

3) understand the divide-and-conquer and dynamic programming algorithms for problems discussed in class (see table below). You should be able to trace the algorithms on specified data, and be able to describe the major concepts of the algorithm.

4) be able to apply divide-and-conquer and dynamic programming techniques to "new" (i.e., not in the text) problems.

5) be able to write recurrence relations for divide-and-conquer algorithms.

6) be able to solve recurrence relations using the techniques of Appendix B (especially the technique of substitution and using the characteristic equation).

7) be able to analyze an algorithm containing nested loops to determine its theta notation, i.e., be able to trace the loops, formulate a summation, write a closed-form expression (no "+ ... +") for the summation, and finally determine its theta notation.

Algorithms Discussed in Class

Technique Problems
Divide-and-Conquer Coin-change problem


Binary search

Merge sort


0-1 Knapsack Problem

Dynamic Programming Coin-change problem


Binomial Coefficient

Floyd's Shortest Paths Algorithm

Optimal Binary Search Tree


0-1 Knapsack Problem