Topics and Learning Objectives
A rough list of topics covered, by week:
Week 1 – Analysis and Running Time of Linear Algorithms
Week 2 – Algorithm Correctness and Linear Sorting
Week 3 – Linked lists, Stacks, and Queues
Week 4 – Analysis and Correctness of Recursive Algorithms
Week 5 – Recursive Sorting and Intro to Trees
Week 6 - Tree Traversals
Week 7 – Binary Search Trees
Week 8 – B-Trees
Week 9 – Hashing
Week 10 – Priority Queues, Heaps, Heapsort
Week 11 – Disjoint Sets, Graph Definitions
Week 12 – Graph Implementation and Traversal
Week 13 – Minimum Spanning Trees, Shortest Path
Course Learning Objectives:
- Define and articulate the functionality of classic data structures such as Stacks, Queues, Dictionaries, Priority Queues, etc. by their Abstract Data Type (ADT).
- Design algorithms and structures to implement novel ADTs based on properties of the data and intended use of the data.
- Implement classic and novel data structures in modern C++, including arrays, linked lists, AVL trees, hash tables, etc.
- Analyze the efficiency (time and space) of algorithms and data structures using asymptotic notation.
- Justify algorithmic choices using iterative and recursive proofs of correctness.
- Evaluate asymptotic time and space tradeoffs between implementation options.
- Identify the structures and algorithms necessary for solving complex problems.
- Synthesize and apply algorithmic and analytical design choices to form complete software solutions of classic problems.