_____________________________________
CS 202 (FALL 2019) - EXAM 2 OUTLINE
_____________________________________
1 C Programming
===============
1.1 Keywords
~~~~~~~~~~~~
Know ALL the keywords, and what they do.
1.2 Loops and Control Flow
~~~~~~~~~~~~~~~~~~~~~~~~~~
Should know / be able to do the following:
- Differences between the different types of loop (for and while) and
control flow (if/else/else if, switch, break, continue) statements
and when to use them
- Evaluation of boolean expressions
- Use preprocessor directives - #include, #ifndef, #define, #if
1.3 Operators and Expressions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Know ALL the operators and their meaning. Given a C expression,
evaluate it.
1.4 Functions Every Citizen Should Know
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Study the functions in the file, except process management / threads /
synchronization.
- Understand why you might use each function, the meaning of the
parameters, and the meaning of the return values.
1.5 Memory
~~~~~~~~~~
Should know / be able to do the following:
- Where a variable is stored in program memory, give examples of each.
- Describe program memory and its components
- Functions to dynamically allocate memory, and when to use them
1.6 Write a program
~~~~~~~~~~~~~~~~~~~
You may be asked to write a small program that demonstrates your
knowledge of the topics mentioned above.
In particular any questions similar to those on the programming
assessment are fair game.
2 Data Structures and Algorithms
================================
2.1 Asymptotic Complexity
~~~~~~~~~~~~~~~~~~~~~~~~~
Should know / be able to do the following:
- Given a program loop, give the time complexity in Big O notation.
* Example: worst/base-case running time of the following pseudocode
in terms of n. A = array of n #'s
total = 0
for i = 0 .. len(A)
for j = i .. len(A)
for k = j .. len(A)
total += A[i] * A[j] * A[k]
* Example: worst/base-case running time of the following pseudocode
in terms of n. B = BST, not necessarily balanced, with n nodes total.
count_neg(B)
if (B == NULL)
return 0
t = count_neg(B->left)
if (B->data < 0)
t = t + 1 + count_neg(B->right)
return t
- Given two time complexities in Big O notation, tell which is faster
or slower. Be able to use the rules of thumb (polynomials outgrow
poly-logarithms, exponentials outgrow polynomials, highest power in
a polynomial dominates eventually)
* Example: Place the following in their proper big-O order from
smallest to largest (here ** means exponentiation) -
10n, 5n*log(n), n**1.1, 10**6 * n**0.5, (log(n))**11,
1.1**(sqrt(n)), n**3 - 100n**2 - 1000n + 5
* Example: Write down 10 different big-O functions that are each
different in terms of big-O, and put them in big-O order
from smallest to largest.
* Example: Consider f(n) = 5*n and g(n) = n*n + 10. Either
prove that f(n) = o(g(n)), or give some evidence for why you would
think this is true. Hint - try increasing values of n, and plot
f(n) / g(n).
2.2 Data Structures
~~~~~~~~~~~~~~~~~~~
Should know / be able to do the following:
- Runtime of the operations for each data structure we have discussed.
- Given some scenario, give the best data structure to use and explain
why.
* Example: What is the best data structure for storing a waiting list
of students if we are gauranteed that the # students is <= 10 at all
times.
* Example: Give a situation where it is better to use a hash table than
a balanced binary search tree, and why.
* Example: Give a situation where it is better to use a balanced binary
search tree than a hash table, and why.
* Example: Suppose you are supposed to take census data that will be
350,000,000 different people, and for each person you will get their
age, id #, and income. If your only task is to compute the average
income, total income, and top 5 incomes in the dataset, which of the
following would be more efficient to store the data:
balanced binary search tree with income as key, unsorted array?
* Example: For the census dataset, give an example of a query to the
dataset that would be a reason you would want it stored in a balanced
binary search tree as opposed to other data structures.
* Example: For the census dataset, give an example of a goal so that
storing the data in a sorted array would be the best solution.
- Describe (via words or pseudo code) how a given operation is
implemented for a given data structure.
2.3 Linked Lists
~~~~~~~~~~~~~~~~
Should know / be able to do the following:
- Advantages and drawbacks of using a linked list
- Variants of linked list (doubly linked, etc) and their advantages.
* Example: give pseudocode for the delete operation for a singly
linked list when you are given a pointer to the node you wish
to delete. (Same but for doubly linked.)
* Example: give a reason to use a singly linked rather than a doubly
linked list (pros for singly-linked versus doubly-linked).
- Implementation of stack / queue and when to use them
* Example: give pseudocode for pushing and popping onto a stack that
is stored as an array.
- Code for traversing a linked list
2.4 Hash Tables
~~~~~~~~~~~~~~~
Should know / be able to do the following:
- What a hash function is, simple example
* Example: define a reasonable hash function for text, and compute
the hash value for the strings "cab" and "dag".
* Example: define a reasonable hash function for integers, and
compute the hash value for the values 123 and 6473.
- Terminology: hash, key, value, bucket, collision, chaining
- Compare and contrast methods of handling collisions
* Example: give limitations when using a hash table that handles
collisions by chaining. what is a work-load that would be
particularly good (or bad) for a hash table that handles collisions
by chaining (e.g., many deletes versus very few deletes).
2.5 Binary Search Trees
~~~~~~~~~~~~~~~~~~~~~~~
Should know / be able to do the following:
- Differences between inorder, postorder, and preorder tree traversal,
when to use them
* Example: Given the following BST, write down the order nodes would be
printed if printed by an inorder traversal. (also for postorder, preorder).
* Example: What traversal is used to print a BST in order from least to
greatest? From greatest to least?
* Example: Consider a tree for evaluating an arithmetic expression. Which
type of tree traversal is used to evaluate the expression?
- Given some scenario, give the best traversal method for the problem,
e.g. delete the entire tree, copy the tree, etc.
2.6 AVL Trees
~~~~~~~~~~~~~
Should know / be able to do the following:
- The ins and outs of the AVL method of balancing the tree
- Given a list of integers, draw what the tree looks like after they
have all been inserted
- Given a tree, is it AVL?
* Example: Given an AVL tree, perform a delete operation and perform rebalancing
if needed
* Example: What is the best/worst-case running time for a sequence of operations?
* Example: Give an example of a sequence of operations where an AVL tree is less
efficient than a plain old non-balancing BST.