Midterm Review for CMPS 2200, Fall 2017
Relevant Material:
 -  All material from 8/28/17 until 9/27/17 (inclusive).
 
 -  This includes material covered in the lectures, and homeworks 1 - 5; no Masters theorem.
 
 
 
 - Analyzing Algorithms [Ch. 0 Dasgupta, ch. 2 CLRS]
 
   -  Best case and worst case  runtimes
   
 -  Not on the test: Loop invariants  
 
 
  - Asymptotic Notation (О, Ω, Θ, ο) [Ch. 0 Dasgupta, ch. 3 CLRS]
 
  - Prove by definition (find a value for c>0 and n_0 > 0
      so that for all n≥n_0 the inequality is satisfied)
      
  
   - f(n) belongs to O(g(n)
   
 - f(n) belongs to Ω(g(n)
   
 - f(n) belongs to Θ(g(n)) [prove both O and Ω]
  
 
   - Prove using limit theorem
 
  
 - Analyze code snippets
 
 
  - Heaps [Ch. 4.5.2 Dasgupta, ch. 6 CLRS]
 
   -  Max-heap property, heap definition
   
 -  Using array implementation, findMax takes O(1) time, and extractMax takes O(log n) time
   
 -  Heapsort: Repeatedly extract max in max-heap; O(n log n) time
 
 
            
  - Red-black trees: [Ch. 13 CLRS]
 
   - Properties of binary search trees
   
 - Properties of red-black trees
     
        - If black-height is b and the height of the tree is h, then b<=h<=2b
	
 - h = b when all the nodes in the tree are black
	
 - h=2b when you have red and black nodes in alternating levels
     
 
         -  Not on the test: In-depth knowledge of the different cases of the insertion procedure
		
   
 - Sample Questions:
   
     -  Justify whether a given tree is a legal binary search tree or a legal red black tree
     
 -  Show rotations on a binary search tree
     
 -  Maximum and minimum number of elements in a red black tree with black height b
   
 
  
  - B-Trees: [Ch. 18 CLRS]
 
   - A B-tree with minimum degree k >= 2 has the following properties:
   
     - Number of keys in root: 1<= #keys <= 2k-1
     
 - Number of keys in other nodes: k-1 <=  #keys <= 2k-1
     
 - Each node has exactly #keys stored in that node + 1 number of children
     
 - All leaves are in the same level
     
 - Only a root split can increase the height of a B-tree
   
 
		
    - Sample Questions:
   
	
     - Justify whether a given tree is a legal B-tree
     
 - For a given set of numbers come up with all possible legal B-trees
     
 - Maximum and minimum number of keys possible to store in a B-tree
     
 - Insertion in a B-tree (use preemptive splitting, and show node split if needed)
   
 
  
  - Recursion: [Ch. 2 Dasgtupa, Ch. 4 CLRS]
 
  - Divide & Conquer
  
   - You can call an algorithm Divide and Conquer only if the size of
       subproblems can be written as n/b where b>1
   
 - There are other recursive algorithms, that are not divide-and-conquer. The subproblems for these problems might have size  n-1, n-2, n-3 etc.
  
 
   - Recursive algorithms and thinking
  
   -  Find a recursive solution to a problem; recursive pseudocode
   
 -  Mergesort, powering a number
   
 -  Not on the test: Convex hull computation
  
 
   - Runtime recurrences
  
   -  Find the runtime recurrence for a recursive algorithm given in pseudocode
  
 
  
  - Solving Recurrences  [Ch. 2 Dasgtupa, Ch. 4 CLRS]: Solve a runtime recurrence (i.e., find an upper bound for a recursively defined T(n)):
 
 - Recursion Tree: Find a guess what a (runtime) recurrence could solve to
     using recursion trees 
 
  -  Given T(n) = aT(n/b) + f(n)
  
 -  a = #of subproblems = #of children at each node
  
 -  n/b = subproblem size
  
 -  Height of the tree = log_b (n) [log of n base b]
 
 
   - Big-Oh Induction
  
   -  Prove your guess/claim using big-Oh induction (also called substitution method). Prove both the base case and the inductive step, and find constants c and n_0 during the proof.
 
 
		
 
 
Practice Problems from the books:
  -  Analyzing Algorithms:
    
      -  CLRS, page 22: 2.1-2, 2.1-3
  
 
     -  Asymptotic notation:
  
    -  Dasgupta, chapter 0: Exercises 1, 2,   
         
    
 -  Dasgupta, chapter 2: Exercises 3 (use recursion trees), 4, 5, 12, 13, 17, 19, 23, 
      
    
 -  CLRS, page 52: 3.1-1,4
    
 -  CLRS, page 61: 3-3 (some are quite hard)  
  
 
   -  Heaps:
  
    -  CLRS, page 153: all exercises
    
 -  CLRS, page 156: 6.2-3,4
    
 -  CLRS, page 160: 6.4-3
  
 
   -  Red-black trees:
  
    -  CLRS, page 289: 12.1-1,2
    
 -  CLRS, page 312: 13.1-6 
    
 -  CLRS, page 314: 13.2-3
    
 -  CLRS, page 322: 13.3-3,5  
  
 
     -  B-trees:
  
    -  CLRS, page 490: 18.1-1,2,3,4,5
    
 -  CLRS, page 497: 18.2-1,3
  
 
     -  and 7. Divide-and-conquer and runtime recurrences:
  
    -  CLRS, page 39: 2.3-3,4,5,6
    
 -  CLRS, page 87: all exercises
    
 -  CLRS, page 92: all exercises
    
 -  CLRS, page 107: Practice the recursion tree method and big-Oh induction on the problems shown in 4-1,3. Note that the big-Oh induction will not work in all cases (there is a more complicated way to handle this, which we have not covered in class)