Date |
Lecture Topics |
Readings |
Assigned Work |
Week 1 |
Lectures |
- Course introduction and goals
- A brief reintroduction to exceptions in C++
- Contracts
- Preconditions and postconditions
- Class invariants
- Writing classes more carefully
- Exception safety
- The noexcept keyword
- Class templates
- Separating interface from implementation, even in header files
- Member function templates
|
|
|
Videos |
- Virtualization: Running more than one operating system simultaneously
- Quick overview of the ICS 46 VM development environment
|
|
|
Th 3/31 |
|
|
- Begin working through Project #0
- Aim to have the ICS 46 set up and ready to run today
|
Week 2 |
Lectures |
- The "resource acquisition is initialization" (RAII) technique in C++
- Automating the release of resources, even when exceptions are thrown, using RAII
- Ownership of dynamically-allocated objects
- Smart pointers (as an RAII technique for memory management)
- Unique ownership and std::unique_ptr
- Shared ownership and std::shared_ptr
- Why not all pointers can be smart pointers
- Multidimensional arrays (briefly)
- Options for storing multidimensional data in C++
|
|
|
Videos |
- Randomness
- Entropy and pseudorandomness
- Generating sequences of random values in C++
|
|
|
W 4/6 |
|
|
|
Week 3 |
Lectures |
- Asymptotic analysis: O-, Ω-, and Θ-notation
- Best-, worst-, and average-case analysis
- Variations on linked lists
- Analyzing linked list variations using O-, Ω-, and Θ-notation
- Stacks, queues, and deques
- "Alternative" forms of algorithm analysis
- Amortized analysis (briefly)
- Why std::vector's reallocations aren't as bad as you think
|
|
|
Videos |
- Moving, as opposed to copying, in C++
- Move semantics in C++
- Rvalue references
- Move constructors
- Move assignment operators
|
|
|
M 4/11 |
|
|
|
F 4/15 |
|
|
|
Week 4 |
Lectures |
- Analyzing the performance of recursion
- Recurrences
- General trees
- General tree implementation
-
- Breadth-first tree traversals
- Depth-first tree traversals (preorder and postorder)
- Comparing the performance (time and memory) of tree traversals
- N-ary and binary trees
- Internal vs. external nodes
|
|
|
M 4/18 |
|
|
|
Week 5 |
Lectures |
- Binary search trees
- The importance of logarithms in computer science
- The importance of keeping binary search trees balanced
- What is a "good" balance condition?
- AVL trees
- Skip lists
- Probabilistic analysis (briefly)
|
|
|
M 4/25 |
|
|
|
W 4/27 |
|
|
|
Week 6 |
Lectures |
- Hashing and hash tables
- Separate chaining
- "Good" hash functions
- Open addressing
- Linear probing
- Hashing objects other than numbers
- Priority queues
- Implementing a priority queue using a min heap or max heap
- Graphs: definition and terminology
- Directed graphs
- Directed acyclic graphs (DAGs)
- Undirected graphs
|
|
|
M 5/2 |
|
|
|
Week 7 |
Lectures |
- Graph implementation trade-offs
- Adjacency lists vs. adjacency matrix implementations
- Depth-first graph traversal
- Breadth-first graph traversal
- Why connectedness is an important factor in a graph
- Connectedness of a graph
- Strong connectedness vs. weak connectedness
- Testing graphs for connectedness
- Dijkstra's shortest path algorithm
- Topological ordering of a DAG
|
|
|
M 5/9 |
|
|
|
W 5/11 |
|
|
|
Week 8 |
Lectures |
- The sorting problem
- What can and cannot be sorted
- Sorting in O(n2) time
- Insertion sort
- Selection sort
- Sorting in O(n log n) time
- Treesort
- Heapsort
- Divide and conquer algorithms (briefly)
- Quicksort
- Mergesort
|
|
|
W 5/18 |
|
|
|
Week 9 |
Lectures |
- A lower bound for comparison-based sorting
- Modeling comparison-based sorts using decision trees
- How to sort in linear time by using techniques other than comparisons
- Counting sort
- Radix sort
- Why radix sort can run in linear time (i.e., linear with respect to what?)
- Equivalence classes
- The Union-Find algorithm
|
|
|
M 5/23 |
|
|
|
W 5/25 |
|
|
|
Week 10 |
Lectures |
- Something fun to be announced later (time permitting)
|
|
|
M 5/30 |
- University Holiday: Memorial Day — NO LABS TODAY
|
|
|
W 6/1 |
|
|
|
F 6/3 |
|
|
|
Finals Week |
Tu 6/7 |
- FINAL EXAM: 7:00pm-9:00pm, EH 1200
|
|
|