Schedule
Outlined below is the schedule for the course, including lecture topics and assignment due dates. All assignments are due at 11:59PM on the date specified. The specific dates of different topics are subject to change based on the pace at which we go through the course.
The assigned textbook for the course covers most of the topics we will go over in the class, but I will sometimes add external links to other resources if I feel the textbook is lacking in a particular area, or if there is a fun application for you to play with beyond what's offered in the textbook.
Lecture | Lectures (click for notes) | Readings/Links | Assignments/Deliverables | |
Intro To Python, Abstract Data Types, And Empirical ComplexityIn this unit we will warm up to algorithms and data structures by learning the basics of Python, which is a language whose syntax is only a short step away from pseuodocode one might write to describe algorithms and data structures. In the process of learning python syntax, we will introduce the notion of an Abstract Data Type (ADT), which is akin to an interface in Java or a header file in C++. In other words, an ADT is an API for a data structure, which makes it usable to an algorithm. But the implementation of the data structure is left unspecified. In this unit, we will actually jump to the end of the book to look at our first ADT, the Disjoint Set ADT, and we will examine an efficient implementation known as Union Find. The unit will culuminate in an application of disjoint sets to finding individual cells in images of plant cells. | ||||
1 | Wed 1/20/2021 | Course Sneak Preview / Meet & Mingle |
| Pre-Class Module 0 Due |
2 | Fri 1/22/2021 | Python/numpy basics |
| Module 1: Python Basics Due Before Class |
3 | Mon 1/25/2021 | Python Classes And Objects, Abstract Data Types |
| Module 2: Numpy, Matplotlib, Python Classes Due Before class |
4 | Wed 1/27/2021 | Disjoint Sets And Union Find |
| Module 3: Disjoint Set Data Structures Due Before class |
5 | Fri 1/29/2021 | Unit Tests And TimeIt |
| Assignment 1: Plant Cell Segmentation out |
Searching And Analytical Complexity AnalysisWe have a bunch of objects, and we want to find them quickly. Operations: Find, Add/Remove First, Add/Remove Last, Add/Remove Middle | ||||
6 | Mon 2/1/2021 | Big-O, Little-o, Big-Theta | Module 4: Analytical Time Complexity And Big O Due before class | |
7 | Wed 2/3/2021 | Linked Lists / Doubly-linked lists |
| Module 5: Little-o And Python Linked Lists Due before class |
8 | Fri 2/5/2021 | The list ADT and Data Structure | Module 6: The List Data Structure And Amortized Cost Due Before Class | |
9 | Mon 2/8/2021 | Sorted List Data Structure And Binary Search |
| Module 7: Amortized Cost Proof, Binary Search Due Before Class |
Tue 2/9/2021 | Assignment 1: Plant Cell Segmentation Due | |||
10 | Wed 2/10/2021 | Hash Tables Algorithm |
| Module 8: Binary Search Implementation, Sets/Maps Due Before Class |
11 | Fri 2/12/2021 | Hash Tables Analysis / Applications | ||
Sun 2/14/2021 | Assignment 2: Complexity Proofs / Autocomplete Out | |||
Recursion And Dynamic Programming | ||||
12 | Mon 2/15/2021 | Recursive function review, evaluating recursive functions |
| |
13 | Wed 2/17/2021 | Memoization, Recursive Drawing | ||
14 | Fri 2/19/2021 | Stacks, Queues, And Towers of Hanoi |
| Module 9: Sierpinski Triangle, Stacks/Queues Review, Towers of Hanoi due before class |
15 | Mon 2/22/2021 | Proofs by Induction, Dynamic Programming, String Edit Distance | Module 10: Proofs by Induction, Memoization, String Edit Distance due before class | |
16 | Wed 2/24/2021 | Optimal Solution Backtracking, Change Making |
| |
Thu 2/25/2021 | Assignment 2 Due | |||
17 | Fri 2/26/2021 | Seam Carving |
| Module 11: String Edit Distance Backtracing Solutions, Making Change Due |
18 | Mon 3/1/2021 | Seam Carving Q&A | Module 12: Seam Carving Due before class | |
-- | Wed 3/3/2021 | Break Day | No CS 371 Class. Enjoy the break! | |
19 | Fri 3/5/2021 | Dynamic Time Warping | Assignment 3: Audio Alignment Out | |
20 | Mon 3/8/2021 | Longest Common Subsequence, Knapsack Problem |
| |
Sorting, Selection, And Shuffling | ||||
21 | Wed 3/10/2021 | Insertion Sort, Bubble Sort, Kendall Tau Distance |
| Module 13: Longest Common Subsequence Due before class |
22 | Fri 3/12/2021 | Merge Sort |
| |
23 | Mon 3/15/2021 | Quick Sort, Stability of Sorts |
| Module 14: Intro To Sorting Due Before Class |
24 | Wed 3/17/2021 | Parallel Algorithms And Bitonic Sort | ||
25 | Fri 3/19/2021 | Radix Sort: Breaking the O(NlogN) barrier | Module 15: Recursive Sorts And Sorting Theory Due Before Class | |
26 | Mon 3/22/2021 | Fisher-Yates Shuffling | Assignment 3: Audio Alignment Due | |
27 | Wed 3/24/2021 | Erin Taylor Q&A, Linear Time Selection |
| Module 16: Radix Sort, Fisher-Yates Shuffling due before class |
Tree Data Structures And Algorithms | ||||
28 | Fri 3/26/2021 | Binary Trees: Preorder, Inorder, Postorder / Drawing Binary Trees | Module 17: Intro To Binary Trees, Preorder/Inorder/Postorder due before class
Assignment 4: Fair Elections of Superheros 0ut | |
29 | Mon 3/29/2021 | Binary search trees: Search/Addition/Removal |
| Final Project Proposals Due |
-- | Wed 3/31/2021 | Break Day | No CS 371 Class. Enjoy the break! | |
30 | Fri 4/2/2021 | Tree Rotations |
| Module 18: Binary Search Trees: Contains/Addition/Removal due before class |
31 | Mon 4/5/2021 | Balanced Binary Search Trees |
| |
Tue 4/6/2021 | Assignment 4 Due | |||
32 | Wed 4/7/2021 | Q&A Session, Tree Rotations Review | ||
33 | Fri 4/9/2021 | Huffman Trees / Huffman Encoding | ||
34 | Mon 4/12/2021 | Priority Queues / Binary Heaps |
| |
Tue 4/13/2021 | Assignment 5: Phylogenetic Trees Out | |||
35 | Wed 4/14/2021 | Tries | ||
Graph Data Structures And Algorithms | ||||
36 | Fri 4/16/2021 | Graph Data Structures, Minimum Spanning Trees |
| Module : Huffman Trees due |
37 | Mon 4/19/2021 | Complexity of Minimium Spanning Trees, Automatic Mazes | Module 21: Minimum Spanning Trees due before class | |
38 | Wed 4/21/2021 | Breadth-First Search, Depth-First Search, Euclidean Traveling Salesperson |
| |
39 | Fri 4/23/2021 | Dijkstra's Algorithm, Prim's Algorithm |
| Final Project Check-In |
40 | Mon 4/26/2021 | Complexity of Dijkstra's Algorithm, Fibonacci Heaps | Module 20: Heaps And Dijkstra's due before class | |
41 | Wed 4/28/2021 | Floyd-Warshall, Bellman-Ford | Assignment 5 Due | |
-- | Fri 4/30/2021 | Designated Tuesday Class | No CS 371 Class | |
42 | Mon 5/3/2021 | Directed Acyclic Graphs / Topological Sort | Assignment 6: Rush Hour Out | |
-- | Fri 5/7/2021 - Thu 5/13/2021 | Coding Interviews | ||
-- | Thu 5/13/2021 | Final Project Due Assignment 6: Rush Hour Due |