(Latest Revision -- 04/23/2002)
CS 4440 Study Guide for Quiz #2:
Study the homework problems of homework sets 3-4. 
-   Chapter Seven Material  
      
      
      -  Know and understand the definition & characteristics
	   of divide-and-conquer algorithms.  (Refer to the
	   "general template" on page 223.)
      
      
 -  Know and understand the connection between computing
	   the work function for a divide-and-conquer algorithm
	   and the solving of recurrences.
      
      
 -  Know and understand the divide-and-conquer algorithms
	   in chapter 7.
      
      
 -  Be able to assess and derive the big-theta of the work
	   functions of the divide-and-conquer algorithms of
	   chapter 7.  (It will not be necessary to produce
	   formal "proofs" of what the work functions are.)
      
      
 -  Be able to recite, in pseudo-code, the steps of the
	   divide-and-conquer algorithms in chapter 7. 
       
      
 -    Chapter Eight Material   
      
      -  Know and understand the definition & characteristics
	   of dynamic programming algorithms.
      
      
 -  Know and understand the bottom-up nature of dynamic
	   programming versus the top-down nature of
	   divide-and-conquer.
      
      
 -  Know and understand how dynamic programming allows us
	   to avoid redundant calculations.
      
      
 -  Know and understand the dynamic programming algorithms
	   in chapter 8.
      
      
 -  Know and understand how to compute the big-theta of
	   the work functions of dynamic programming algorithms.
      
      
 -  Know how to "backtrack" through the output of the
	   change-making algorithm to find the coins required for
	   an optimal solution.
      
      
 -  Know how to "backtrack" through the output of the 0/1
	   knapsack algorithm to find the weights taken in an
	   optimal solution.
      
      
 -  Know how to "backtrack" through the output of Floyd's
	   algorithm to find the edges of a shortest path.
      
      
 -  Know and understand the principle of optimality and
	   its relation to dynamic programming problems.
      
      
 -  Know and understand how to get increased efficiency by
	   combining dynamic programming with a memory function,
	   virtual intitialization, and a top-down (recursive)
	   approach. 
      
       
 -    Chapter Nine Material   
      
      -  Know how to set up and mark a game graph for a simple game
           
           -  Understand how to make the nodes and edges.
           
 -  Know how to mark winning and losing positions
           
 -  Know how to find winning moves and losing moves.
           
 
       -  Understand the backtracking technique -- be able to
	   trace out steps of the backpack(i,r) function of pate
	   308.
      
 -  Understand how to do the assignment problem of pages
	   312-315.  
      
      
 -  Understand the role of the bounding function in the
	   assignment problem.
      
 -  Understand the "General Considerations" in section 9.7.3
      
 
 
Know these algorithms especially well:
-  "Selection2" and the algorithms it calls (including pseudomed)
 -  expoDC
 -  Making Change
 -  0/1 Knapsack
 -  Floyd's algorithm
 
For any of the five algorithms above, be able to show what the
algorithm will do in a "walk-through."  For example, if I tell
you an input for one of these algorithms, you should be able to
describe, one at a time, the series of changes the algorithm
makes to its data objects, until the algorithm stops, with the
solution to the problem indicated in the values of the data
objects. 
if I show you the values of the data objects mid-way through the
execution of one of these algorithms, you should be able to show
me what changes the algorithm will make next to the data objects.