### CS 3100 Exam Study Guide

Chapter Five -- Recursion as a Problem-Solving Technique
• Be able to explain what backtracking and recursion are.

• Be able to understand simple grammars like those described in the chapter. Be able to construct simple grammars.

• Understand what prefix, postfix, and infix expressions are and know grammar rules for such expressions.

• Be able to answer questions about how to implement a recursive grammar checker like the example grammar checkers for C identifiers, palindromes, or prefix expressions.

• Be able to describe recursive algorithms for solving some simple problems. Be able to identify the base case(s) and recursive step(s) in simple recursive algorithms.

• Study Questions in Carrano, ed 5:
• Self Test Exercises: 2-6;
• Exercises: 1-3, 9;

Chapter Nine -- Algorithm Efficiency and Sorting

• Understand the role of operation counts in measuring the work done by an algorithm.

• Know the definition of the order of an algorithm -- the big-O of the algorithm.

• Understand the importance of big-O analysis as a comparative measure of growth-rate functions of algorithms. Understand the way that common big-O rates are ordered: O(1) < O(logN) < O(N) < O(NlogN) < O(N^2) < O(N^3) < O(2^N). (Here we use the notation b^c to denote "b raised to the power c.")

• Know properties of growth rate functions such as O(5*N^2) + O(N) = O(N^2)

• Know the following sorting algorithms and be able to discuss their orders appropriately: Selection Sort, Bubble Sort, Insertion Sort, Mergesort, Quicksort, and Radixsort.

• Be able to discuss the improvements to quicksort discussed in the text and in lectures.

• Study Questions in Carrano, ed 5:
• Self Test Exercises: 1, 3-8.

Chapter Eight -- Class Relationships

• Be able to explain the relationship between a base class and a class that has been derived through public inheritance.

• Understand how to implement "is-a," "has-a," and "as-a" relationships among classes.

• Understand what class templates are. Be able to recognize and use them. Understand the advantage of using class templates.

• Know what overloaded operators are and their advantages. Know about how the operator keyword is used when making the function prototype for an overloaded operator.

Chapter Ten -- Trees

• Know the definitions of all the concepts in the chapter related to tree anatomy: node, edge, parent, child, sibling, root, leaf, ancestor, descendant, subtree, height, level, full, complete, balanced, and so forth.

• Understand preorder, inorder, and postorder traversal. Know algorithms for implementing these traversals on a binary tree. Given a diagram of a tree, be able to list the keys in the nodes in any of these traversal orders.

• Know the definition of binary search tree. Understand the algorithms for doing search, insertion, and deletion in a binary search tree. Given a diagram of a binary search tree, be able to draw another diagram showing how the tree would look if a given element were inserted or deleted by the algorithms described in our text.

• Understand how the efficiency of binary search tree operations depends on the shape of the tree.

Chapter Eleven -- Tables and Priority Queues

• Know what the "basic operations" are that "define the ADT table" (c.f. pp. 517-519). Understand what these operations do well enough to write specifications for them.

• Be aware of the advantages and disadvantages of various implementations of the ADT table. In particular if I name a table operation, you should be able to discuss how efficient that operation can be made in various table implementations.

• Know what the "basic operations" are that "define the ADT priority queue" (c.f. pp. 536-537). Understand what these operations do well enough to write specifications for them.

• Understand how to implement a priority queue using an ordered list, binary search tree, or heap. Understand the advantages and disadvantages of the various implementations.

• Know how to define a heap. Know how to implement a heap with the array implementation described in the text. Understand how insertion and deletion are performed in this implementation.

• Know how heapsort works -- how it transforms a randomly ordered array into a heap, and how it then uses the heap deletion operation to sort the array.

Chapter Twelve -- Advanced Implementations of Tables

• Be able to define 2-3 tree, 2-3-4 tree, red-black tree, and AVL tree.

• Know how to conduct a search by key in any of the structures named above.

• If I give you a sketch of a 2-3 tree or 2-3-4 tree and tell you to insert and/or delete some keys, you should be able to accurately sketch how the tree will look after each operation is carried out.

• Know the definition of hashing. Know the advantages and disadvantages of hashing relative to other implementations of the ADT table.

• Know what a hash function is. Know what a perfect hash function is. Know the two properties that a good hash function must have. Know several examples of hash functions.

• Understand the need for collision resolution. Know the definitions of open addressing and separate chaining and understand how to implement these forms of collision resolution.

• Understand the following terms: linear probing, primary and secondary clustering, quadratic hashing, double hashing. Understand why it is desirable to make the size of a hash table a prime or an integer without any small divisors.

• Know the definition of "load factor" and know the range of load factors that are well-supported by open addressing and separate chaining.

Chapter Thirteen -- Graphs

• Know definitions of graph-related terms such as: graph, vertex, edge, subgraph, path, cycle, multigraph, connected graph, and directed graph.

• Know the basic operations that would be incorporated into the definition of a graph as an ADT. Understand what these operations do well enough to write specifications for them.

• Understand how to represent a graph and implement its operations either with an adjacency matrix or an adjacency list. Be able to discuss the relative efficiencies of the operations depending on how they are implemented.

• Remember and understand the algorithms for depth first search, breadth first search, topological sorting, and finding a minimal cost spanning tree.