CS161L: Implementation of Algorithms

Course Information

Summary

Welcome to CS161L: Implementation of Algorithms! This is a new companion lab to CS161: Design and Analysis of Algorithms. In this lab, you'll get a chance to actually implement many of the algorithms taught on a whiteboard in that class, to see what details are swept under the rug when dealing with algorithms on paper.

CS161 is a standalone class, so you don't need to take CS161L to grasp the CS161 material. That said, CS161L is designed to complement the material in CS161, so even if you decide not to officially take CS161L, I'd recommend looking through the materials provided here. Also keep in mind that CS161 has a final programming project, so if your programming skills are feeling rusty, it may be worth trying some of these problems out to limber up.

Details

Every Wednesday, by the end of the CS161 lecture, the problems for the week will be posted here. On Friday, we'll meet in lab to work on the problems. Each week one problem will be marked with an asterisk; that is the problem that you will need to turn in. The other problems will often lay the groundwork for the required problem, though, so I strongly recommend completing all of them, in the order listed. After lab on Friday, slides and other materials related to the problems will be posted here. The required problem is due by the end of the following Monday (11:59pm), as the solutions will be made available on Tuesday.

This is a pass/fail course. To pass the course, you must submit correct solutions to at least 76 of the 9 required problems. Substantial sample data will be provided, so you will be able to check before submitting whether your solution is correct. No late submissions will be accepted.

Attendance is not required for this class; however, attending lab is the easiest way to ensure you complete the problems. The lab is designed to be hands-on; each session will begin with a short presentation of the problems, and then you'll begin coding in class, and we'll discuss design and debugging issues as they come up. The problems are designed so that you can complete most if not all of the coding within the time allotted for the lab.

This class will officially support Java and unofficially support C++. What this means is that slides and online materials will all be written in Java, but I WILL accept C++ code that meets the problem specifications. I'm keeping this option open for those of you who are significantly more comfortable in C++ than you are in Java, though I will strongly recommend using this course as an opportunity to pick up Java from C++, especially since the CS161 final programming project will support ONLY Java and NOT C++.

Materials