CS1102/C_Overview-Linear.doc

advertisement
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.
Download