The following is a list of information you should be familiar with. It may be redundant, and may contain information you have seen in previous study guides. Know details about data structures covered during the course. Some examples include, although the final is not limited to this list, are: Stacks, Arrays, Queues, Treaps, Tries, Binary Search Trees, Complete Binary Search Trees, Graphs, Vertices, Leaf Vertices, Internal Vertices, Root Vertices, Directed Acyclic Graphs, Acyclic Graphs, Directed Graphs, Trees, Linked Lists, Doubly Linked Lists, Heaps, etc. Be familiar with code for quicksort. Be familiar with benefits of quicksort. Be familiar with sorting and search algorithms covered in class. Some include: Bubblesort, Heapsort, Insertion sort, Merge Sort, Polyphase Merge Sort, Quick sort, Radix sort, Selection sort, binary tree insertion sort, balancing a binary search tree by using randomization, etc. Be familiar with: Finding the Greatest common divisor, Least common multiple, Euclid's algorithm, finding max value, finding min value, find mean value, strictly monotone increasing subsequence, subsequence, increasing subsequence, priority queues, divide and conquer techniques, theoretical lower bound, sorting networks, comparison-exchange, comparison model of computation, maximum subsequence problem, knapsack problem, etc. Be familiar with prefix, infix, and postfix notation. Which can be easily used with a stack? You should be able to figure out other properties of these as well. Be familiar with homework and book exercises given in class. Be able to program: Bubble sort, insertion sort, selection sort, and be familiar enough with the other search and sorting algorithms to be able to write pseudo code for them. Understand the concept of "in situ". Know the difference between pass by reference and pass by value. Be familiar with definitions and details about: The birthday paradox, Union-Find algorithm, Dijkstra's algorithm, greedy algorithms, Huffman coding problem, Kruskal's algorithm, Prim's algorithm, AVL Trees, B-Trees, 2-3 Trees, sparse arrays, dynamic programming, disjoint set, hashing, open hashing, linear probing, etc. Be familiar with basic LaTeX commands. Be familiar with asymptotic time complexity. Be able to analyze code, optimize code to be better time complexity and program code on problems related to work we've done during the semester. Be able to analysis C++ code fragments and count how often things occur. Be understand and be familiar with loop invariants. Be able to classify algorithms as greedy, dynamic programming, and other classifications illustrated during class. Know advantages that certain data types have over others. Be able to explain (and perhaps write code) illustrating implementation of code using different data types. 1. What is the difference between pass by reference verses pass by value? 2. What is a Copy Constructor? 3. What is a class template? 4. What is operator overloading? 5. What is the definition of Big O? 6. What is the definition of Big Omega? 7. What is the definition of Big Theta? 8. What is the importance of asymptotic time complexity analysis? 9. Explain the maximum subsequence sum problem. 10. What is a binary search? 11. Explain Euclid's Algorithm. 12. What is an Abstract Data Type? 13. Why are Abstract Data Types important? 14. What is a list ADT? 15. List two ways a list ADT can be implemented. 16. Define a doubly linked list. 17. Define a circular linked list. 18. Define a stack ADT and what one can be used for. 19. What are infix expressions? Give an example that has at least 4 operators and at least two necessary pairs of parentheses. 20. What are postfix expressions? Give the postfix expression equivalent to the infix expression that you gave for the previous problem. Be able to analysis code and answer questions about Big-O notation, Theta notation, and Big-Omega notation. Practice your code analysis. Can you give the Big-O, Theta, and Big-Omega notations of the following code fragments? 1. for(i=0;in) { for(j=0;j0;j--) cout << "foo\n"; i++; } while(i-512;m--) cout << "foo\n"; 13. for(i=1;i=i;j=j/2) cout << "foo\n"; 14. for(i=1;i