Final exam questions. Two questions from the following ones will be given on the test in addition to the practical problems similar to ones on tests 1 and 2. These questions will require VERY detailed answers with explanations, examples, etc. Consider them as a review of the course offerings that are MUST KNOW to be successful in the class. 1. Describe and compare insertion sort, radix sort and merge sort. Give examples to show when each one of these sorts will be more preferable compared to others. 2. Describe the Queue ADT (give a definition, set of operations, implementations). What kind of a queue is a priority queue? What is the most efficient implementation of a priority queue? Describe it (example will help). 3. Describe the Binary Tree ADT (definition, set of operations), and its implementations. Show how ordered lists can be implemented by means of binary trees. Explain the efficiency of this implementation and discussed how it can be improved by using 2-3 and 2-3-4 trees. 4. What kind of a binary tree is the heap? Explain how heaps are implemented. Describe in detail heap insertions and deletions. Compare heaps to binary search trees in term of efficiencies of main operations. 5. Describe the Ranked Sequence ADT (give a definition, set of operations). Compare the array-based and the doubly linked list implementation of the Ranked Sequence ADT. 6. Describe the Dictionary ADT (give a definition, set of operations, example). Compare ordered and unordered dictionaries in terms of the efficiency of main operations, and discuss different implementations of both. 7. Describe heap sort and compare it to quick sort: trace both on the same example and compare their efficiencies. 8. Describe 2-3 and 2-3-4 trees. Explain and compare their search efficiencies and memory utilization. 9. Describe the Graph ADT. Explain depth-first and breadth-first traversals for both directed and undirected graphs; show the difference between them. Use an example. 10. What is a weighted graph? Explain the minimum spanning tree problem, and compare Prim's and Kruskal's algorithms. Is there a unique spanning tree for a weighted graph? If not, give an example of a graph that has more than one minimum spanning tree. Can a minimum spanning tree contain a cycle? 11. Define the shortest path problem and describe Dijkstra's algorithm. Give an example to illustrate how this algorithm works. Using the same example, compare the shortest path from a designated vertex to all other vertices, to the minimum spanning tree originated from the same starting vertex. Are they the same? 12. Define the all shortest paths problem and explain Floid's algorithm. Can Dijkstra's algorithm be used for finding all shortest paths? Compare the two solutions to the all shortest paths problem. 13. What is the transitive closure of a graph? Explain Warshall's algorithm for computing the transitive closure. 14. Explain the topological ordering problem and show how it can be solved for directed acyclic graphs. Give an example to illustrate it.