CS1102C – My Personal Check List Last Updated on: 13 November 2006, 5.50pm This linear outline check list document is outdated! But I’ll leave it as it is for some students who still prefer linear outline. I found out that the radial, colorful, iconic mind map technique is much better to help the students in understanding the overall concepts. Please refer to my website for my CS1102C mind map graph. No Topic Subtopic C++ 1. Basics Object-Oriented: Inheritance, Overloading, Polymorphism… 2. Specifics Class: *.h, *.cpp, Operator Overloading, throwing Exceptions ADT, Data Structures & Their Basic Algorithms 3. Array Definition: Contiguous block of data, static, can be in 1-dimensional, 2-D, 3-D, N-dimensional… Can I explain the strengths & weaknesses of Array? Can I create 2-D or 3-D array of class X (where X is your own class)? 4. Vector Definition: A resize-able array Can I explain the strengths & weaknesses of Vector? Have I tried C++ STL <vector>? 5. Link List Definition: A collection of list nodes (item/value/content plus pointers to identify neighbors) single link list single link list with tail pointer double link list circular link list head/tail pointers Strength & Weaknesses of Link List? Can I argue when and why I should use a certain variant of link list, and not the other? Have I tried C++ STL <list>? 6. Stack Definition: Data structure to support Last In First Out – LIFO push, top, pop What are the applications for stack? Have I tried C++ STL <stack>? 7. Queue Definition: Data structure to support First In First Out – FIFO enqueue, dequeue, front, back What are the applications for queue? Tick/Annotate here! 8. Tree 9. Hash Table 10. Heap 11. Graph Have I tried C++ STL <queue>? Definition: Similar to pointers in Link List, but this time the pointers can be more than one (usually 2) Definition: Tree, Binary Tree, Complete/Full, Height, Size, Sub-Tree Tree Traversals: inorder, preorder, postorder, levelorder Definition: Binary Search Tree, left smaller, right larger Searching in BST Insertion in BST Deletion in BST What are the applications for tree? What is the major weakness of BST therefore we need balanced trees? Definition: Balanced Tree, AVL Tree, Rotations, Balance factor Searching in AVL Tree Insertion in AVL Tree Deletion in AVL Tree Have I tried C++ STL <map>? Definition: Hashing, Collision Designing good hash function: fast, uniform distribution, not random. Collision Resolution Strategies: Separate Chaining, Open Addressing, with their pro & cons… Open Addressing (linear probing, quadratic probing, double hashing) Do you know when you should use BST versus Hash Table? Have I tried C++ STL <hash_map>? Definition: Heap property (Complete Binary Tree), Max and Min Heap Array based implementation of Heap, index start from 0 vs 1, Parent(i), Left(i), Right(i) Operations on Heap: Heapify (shift_down), IncreaseKey (shift_up), BuildHeap, HeapSort. For Priority Queue: ExtractMax, Insert. Common in Heap: Going up/down the Heap tree (root to leaves and vice versa), swap root/last item Have I tried C++ STL <queue> for priority_queue? Have I tried C++ STL <algorithm>: make_heap, is_heap, pop_heap, push_heap?? Definition: Edges, Vertex, Un/Weighted edges, Un/Directed, Cycle, Path Graph representations: adjacency matrix, adjacency list, their pro & cons? Common Graph problems: Shortest path: on weighted vs unweighted graph, single source vs all pairs Minimum Spanning Tree, Checking Graph properties: connectivity, cycle, path length, etc And many others… Do I aware of them? Common Graph algorithms: Depth First Search (DFS) Breadth First Search (BFS) When should I use DFS, when should I use BFS? Topological Sort Dijkstra Single Source Shortest Path algorithm Do I aware of the variations of these basic algorithms? Do I know other graph algorithms? Other Basic Algorithms 12. Recursion Can you think recursively? 13. Algorithm Big O: f(n) upper bounded by g(n), f(n) = O(g(n)) iff ? Analysis Theta: f(n) tightly bounded by g(n), f(n) = (g(n)) iff ? Omega: f(n) lower bounded by g(n), f(n) = (g(n)) iff ? Remember: 1 < lg n < n < n lg n < n2 < n3 < 2n < n! 14. Sorting Various sorting algorithms: Bubble Sort - O(n2) , (n) Insertion Sort - O(n2), (n) Selection Sort - (n2) Merge Sort - O(n log n), Merge algorithm O(n) Quick Sort - expected O(n log n), Partition algorithm O(n) Radix Sort: non-comparison based sort Why don’t we use Radix Sort all the time? Other concepts: Stable, In-place What’s Next? 15. Future Do I want to know more about advanced Data Structures and Algorithms? [if yes, take more advanced algorithm courses , e.g.: CS1305, CS3230, CS3233, etc] Ideas that keep occurring throughout CS1102C (which means they are important): 1. Use C++ Standard Template Library (STL) whenever possible. 2. For all Data Structures, basically you have certain basic properties and operations that you performed on these data structures must maintain/restore these properties if it happens to cause the property to be violated. 3. CS1102C lectures are theories. You still need to do/learn the C++ programming by yourself.