Overview
The objective of this course is to introduce students to data structures (linked lists, binary search trees, hash tables), Abstract Data Types (Stacks, Queues, Maps, Sets, Graphs), algorithms (sorting, graph search, minimal spanning tree) and algorithms design techniques(greedy, divide and conquer, dynamic programming, etc) Prereq: ECE 150 (or equivalent)
Instructor
Ziqiang Patrick Huang (ziqiang.huang@uwaterloo.ca) E7-5424
Lab Instructor
Mike Cooper-Stachowsky (mstachowsky@uwaterloo.ca)
Teaching Assistants
Majid Dashtbani (majid.dashtbani@uwaterloo.ca)
Sheikh Abrar Tahmid (sheikh.abrar.tahmid@uwaterloo.ca)
Prajwal Thakur (prajwal.thakur@uwaterloo.ca)
Ninghan Zhong (n5zhong@uwaterloo.ca)
Lectures, tutorials, labs
For lecture, tutorial and lab schedules, see the Undergraduate Schedule of Classes.
Makeup Lectures
We have 5 makeup lectures tetatively scheduled throughout the term. Whether they will be used will depend on the pace of the course. Students will be notified (in class & through emails) beforehand if we intend to use any of them.
Tutorials
We will walk through example problems that help students strengthen their understanding of lecture materials and prepare for exams. (Tutorials will start from the 2nd week)
Discussion Forum
We will use Piazza for class discussions. The system is highly catered to getting you help fast and efficiently from classmates, the TAs, the lab instructor, and myself. Rather than emailing questions to the teaching staff, you should post your questions on Piazza. The Piazza course site is here
Office Hours
Patrick: by appointment (Email me and we will set up a time)
TAs: during lab sessions & by appointment (Please email all the TAs when booking an appointment)
Textbook
We will be mostly using lecture notes posted on Learn, however, students are encouraged to use the following optional texts to supplement their learning:
Mark Allen Weiss, Data Structures and Algorithm Analysis in C++, 4th Ed., Addison Wesley, 2012.
Cormen, Leiserson, Rivest, and Stein (CLRS), Introduction to Algorithms, 2nd Ed., MIT Press, 2001.
Grading
Lab Projects: 25%Projects
There will be 5 projects in the course. Each project will be given about 2 weeks to finish. Projects are done individually. Details about the projects will be posted on Learn.
Release date | Due date | Weight | |
P1 | Jan 10 | Jan 24 | 10% |
P2 | Jan 24 | Feb 7 | 15% |
P3 | Feb 7 | Mar 7 | 25% |
P4 | Mar 7 | Mar 21 | 20% |
P5 | Mar 21 | April 4 | 30% |
Exams
Midterm exam is currently scheduled on Feb 25 at 9:30am. Final exam schedule will be posted once available. Both will be closed-book exams.
Late Policy
Late assignments will not be accepted without documentation submitted via appropriate UW channels. 48-hour self-declared absence cannot be applied to LAB components per UW policy.
Assignment Screening
Plagiarism detection software such as MOSS (https://theory.stanford.edu/~aiken/moss/) WILL be used for lab code.
Tentative Course Schedule
Week of |
Topics |
Jan 6 |
Introduction and Logistics |
Jan 13 |
Algorithm Analysis & Abstract Data Types |
Jan 20 |
Lists, Stacks, Queues |
Jan 27 |
Trees, Binary (Search) Trees, Tree Traversals |
Feb 3 |
AVL Trees, Red-Black Trees |
Feb 10 |
Heaps, Priority Queues |
Feb 17 |
Reading Week |
Feb 24 |
Midterm Week |
Mar 3 |
Hashing, Hash tables |
Mar 10 |
Sorting Algorithms |
Mar 17 |
Introduction to Graphs, Graph Traversals |
Mar 24 |
Graph Algorithms |
Mar 31 |
Algorithm Design Techniques |