Schedule

Click a week to see what to do, what to read, and the slides. Each week’s learning objectives are there too, folded away until you want them.

Bloom's level: Remember Understand Apply Analyze Evaluate Create , hover a dot to see its level

📝 Do
📖 Read
C++ for Python Programmers Ch. 1–2, Sec. 5.1–5.2
🖥️ Slides
🔗 Explore
Learning objectives 9
  • Describe the process of compilation of a C++ program.
  • Articulate the importance of initializing variables.
  • Identify and compare the sizes of different data types.
  • Explain what pointers are and how dereferencing works.
  • Perform basic I/O using cout and cin.
  • Create and initialize variables of various data types.
  • Write and convert values in decimal, hexadecimal, and binary.
  • Declare and initialize array variables.
  • Create pointers and use the dereferencing and address-of operators.

Learning objectives 7
  • Articulate the differences between in, out, and in/out parameters.
  • Compare pass-by-value, pass-by-reference, and pass-by-const-ref and choose correctly.
  • Write if, if-else, if-else-if, and switch statements correctly.
  • Create while and for loops using break and continue.
  • Define and call functions with overloading and default arguments.
  • Pass arrays as parameters to functions.
  • Use Makefiles to build multi-file C++ projects.

📝 Do
📖 Read
🖥️ Slides
Learning objectives 5
  • Explain end-of-file conditions and how to detect them.
  • Explain the purpose and flow of exception handling (try/catch/throw).
  • Open, read from, write to, and close files.
  • Use try, catch, and throw correctly in C++ programs.
  • Define, iterate over, and manipulate two-dimensional arrays.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 7
  • Reason about public and private access modifiers.
  • Explain when C++ calls constructors and destructors and why that matters.
  • Define a class and implement it across .h and .cpp files.
  • Implement constructors, destructors, and general methods.
  • Instantiate objects statically.
  • Implement operator overloading for a class.
  • Apply test-driven development to design and verify a class.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 7
  • Reason about the difference between shallow and deep copies of a data structure.
  • Explain when C++ calls the destructor on an object.
  • Explain when it is important to implement the destructor explicitly.
  • Understand how a dynamic array adapts its internal size.
  • Recognize and implement a copy constructor.
  • Use new, delete, and delete[] to manage dynamic memory.
  • Implement a dynamic array class with resizing behavior.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 6
  • Describe when appending to a dynamic array is inexpensive vs. expensive.
  • Reason about the difference between a dynamic array's size and capacity.
  • Explain what a class template is and why to use it instead of a class.
  • Reason about time complexity: linear, constant, and amortized constant time.
  • Implement a class template.
  • Determine the time complexity of append, insert, remove, and copy-constructor on a dynamic array.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 6
  • Describe the organization of a linked list and how Nodes chain together.
  • Reason about the time complexity of prepend, append, remove, traverse, search, and indexing.
  • Explain how the Node destructor causes a chain reaction to delete all Nodes.
  • Compare and contrast a linked list vs. a dynamic array and choose the right one for a given scenario.
  • Write code to traverse a linked list.
  • Implement prepend, append, and remove operations on a linked list.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 6
  • Describe the concept of Big-Oh notation for analyzing algorithmic complexity.
  • Reason about Big-Oh as an approximation: a·f(n) + b.
  • Identify typical Big-Oh curves (O(1), O(log n), O(n), O(n log n), O(n²)).
  • Analyze best, worst and amortized complexity.
  • Classify the time complexity of a given algorithm using Big-Oh notation.
  • Compare the efficiency of two algorithms and justify the better choice.

Friday Oct 23 is a POGIL, classifying the complexity of code snippets, in groups.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 7
  • Enumerate the typical API for a Stack and a Queue.
  • Define an Abstract Data Type (ADT).
  • Describe how a circular array works, and how hashing computes an index.
  • Reason about collisions, load factor, and the time-space trade-off in a hash table.
  • Implement a Stack with O(1) push and pop.
  • Implement a Queue with O(1) enqueue and dequeue.
  • Implement and use a hash table with a reasonable hash function.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 7
  • Explain how a recursive function calls itself, and how it terminates.
  • Describe the run-time stack, and the winding and unwinding phases.
  • Reason about the complexity of Towers of Hanoi.
  • Identify the time complexity of common sorting algorithms.
  • Design and implement a recursive solution to a problem.
  • Implement insertion sort and selection sort, and compare them.
  • Explain why merge sort is tractable only because it is recursive.

📝 Do
📖 Read
to be announced
🖥️ Slides
Learning objectives 5
  • Articulate the operations one can perform on a Binary Search Tree.
  • Understand insert, contains, remove, getHeight, the destructor and traversals.
  • Describe the characteristics and complexity of the STL set and map.
  • Implement a BST with insert, contains and traversals.
  • Write code using iterators to traverse a set or a map.

The STL set and map are trees underneath, you meet the library's version the same week you build one by hand.

📝 Do
no assignment, a15 spans weeks 13–14
📖 Read
to be announced
🖥️ Slides
⚠️ Nov 25–27 Thanksgiving break. Nov 23 class covered by substitute.
Learning objectives 5
  • Identify an AVL tree as a self-balancing BST.
  • Articulate the importance of the balance factor in determining when to rebalance.
  • Name the four rotation cases: LL, RR, LR, RL.
  • Compute the balance factor for a node.
  • Implement AVL rotations to restore balance after insert or remove.

📝 Do
📖 Read
to be announced
🖥️ Slides
being written
Learning objectives 4
  • Describe Moore’s law, and why manufacturers stopped raising clock speed.
  • Describe the fork-join paradigm.
  • Reason about how memory access patterns affect parallel speed-up.
  • Use #pragma omp parallel for to parallelise a loop.

Window 3 reference date is Dec 2, in this week.

📝 Do
a15 continues
📖 Read
to be announced
🖥️ Slides
being written
Learning objectives 2
  • Explain the speed-up you measured, and when parallelism does not help.
  • Compare timings across scheduling strategies and justify the difference.

Dec 9 is the last day of classes, all work and all check-in bookings close.