CS 312 – Algorithm Analysis

Syllabus Fall 2014


Sec. 1 TuTh 9:30-10:45am, 134 TMCB

Sec. 2 TuTh 1:35-2:50pm, 2111 JKB

Professor: Tony Martinez, 3326 TMCB, 422-6464, http://axon.cs.byu.edu/~martinez

martinez at cs.byu.edu, Office Hours: by appointment

Course website: http://axon.cs.byu.edu/~martinez/classes/312/


TAs: Andrew White, David Boudreau, John Nuttall, E-mail: byucs312ta@gmail.com

 Office hours: Andrew: MW 11:00am-12:00, 4:00pm-5:00pm, TuTh 4:30pm-5:30pm (1058 TMCB, cubicle 20)

David:, M 12:00-2:00pm, W 2:00pm-4:00, F 11:00am-12:00, 1:00pm-3:00pm (1058 TMCB, cubicle 22)

John: MW 9:30am-10:45am, TuTh 12:00-1:30pm (1058 TMCB, cubicle 22)


Goals:  Analysis of algorithms from both a practical (programming) and theoretical (mathematical) point of view.  Understanding of algorithm efficiency in terms of both time and space.  Understanding and proficiency with fundamental algorithmic paradigms which are critical in efficient programming.  These include Divide and Conquer, Greedy, Graph Algorithms, Dynamic Programming, Linear Programming, Intelligent Search, Local Search, and Probabilistic Programming.  A side goal is to have an experience with Visual Studio and the C# programming language.


Prerequisites:  CS 240, CS 252


Text: The textbook for the class is Algorithms by Dasgupta, Papadimitriou, and Vazirani There will also be a few supplemental handouts available from the schedule page.  You are expected to read the assigned literature before and optionally after the scheduled lecture. To help encourage quality reading, I will pass around a sheet each day for you to mark whether you have done a complete and careful reading, a partial reading, or no reading.  A complete and careful reading counts for 2 points, partial gets 1 point, and none receives 0 points.  Each day you will mark if you have done the reading for the lecture to be given that day.  The grading will be non-linear such that missing one or two readings does not hurt much, but it picks up fast after that.


Programming Projects:  There will be 5 individual programming projects throughout the semester and one final group project.  For each project, you will solve a concrete problem by implementing an algorithm in such a way as to meet a conservative performance requirement. A reasonable implementation will sail through the performance requirement. You will prepare a typed report electronically according to the guidelines for each project. You will answer questions posed in the project guidelines and usually report the results of an empirical analysis of your algorithm. All project reports should include a copy of your source code and a screenshot demonstrating the working algorithm.  Submission: All project reports should be prepared in PDF format and be submitted via e-mail to the TA on or before the published due date, except the group project which is due as a hardcopy at the beginning of the last day of class.


All projects will be done in C# using visual studio.  This software is installed in all open lab machines and you can also download the full visual studio for free since you are a BYU student. Also, anyone can download C# express which takes much less space and has everything you will need for the projects.  Follow this link for more information on installing and using C# and visual studio.


Homework: Regular homework assignments are posted on the schedule.  Changes to the existing homework schedule are inevitable and will be announced in class and posted to the schedule.  Homework will help solidify concepts learned during the lecture and from the required reading.  Often the homework will help you prepare to succeed on your projects as well.  A reasonable attempt, even though incorrect, at a homework will earn at least half credit.  “Reasonable” means that you show your work and justify your answers.  For both homework and exams, you should show your work and approach as to how you got the answer, since making sure you understand the techniques being taught to solve the problems, is as important as just getting the right answer.  Unless you are having fun, do not spend more than two hours on a non-project homework assignment.  Homework assignments are due on paper at the beginning of class on the due date specified on the schedule.  Keys for the homework will be published on BYU’s CTL after their due date.


Exams:  There will be one mid-term and a final exam.  The mid-term will be in the testing center and the final will be in class at the university appointed time.  Both tests will be closed book.  For each exam, you may bring one page of notes (single sided and with a font no smaller than Times 12).  You will hand in your note sheet with the tests.


Working together:  You are encouraged to work together on studying for exams and discussing lectures and homework assignments.  You may also discuss together ways to do your programming projects and compare results, etc.  However, you must do your own work when it comes to final solving and writing homework answers and coding for your projects.  If you work closely with one or more students on a project or homework, list the names of those students on the project or homework.  We will set up a discussion group on BYU CTL’s Digital Dialogue or Google groups for this class which you can join if you would like.  You can use this group to post questions and have discussion with your class mates.  The TAs will also monitor this group and answer questions which come up.  This is a good place to post and ask about performance results so you can see if your solution is in the “ballpark.”  This is also a good place to discuss high level algorithmic issues and also issues such as how to link into certain libraries, etc.  Remember, that actual algorithmic code or pseudo code should not be published on this group.


Grading (~):  The first project is simpler and will be given less weight than the others.  Grades will be posted on BYU Gradebook.  However, ignore any BYU Gradebook guesses on actual letter grade values as they are not correct.  Just use BYU Gradebook to make sure your assignments have been properly recorded.  Grading is on a curve and I do the grade allocations at the end of the semester.  The approximate breakdown is:













Late assignments:  Homework assignments are not accepted late, as they are meant to keep you up to speed on lectures, and also because we will immediately post answer keys after the homework is due.  For projects, you will be allotted a total of 4 late days throughout the semester (hopefully, you will not need any of them).  As an incentive, 1 extra point (out of 100, and up to a maximum of 4 points) will be allotted for each day (excluding Sunday) you turn in a project earlier than the due date.  If/after you use up your 4 day allotment, late projects will be marked off at 5%/day late (excluding Sundays) up to a maximum of 50% off.  Each late day ends at midnight.  Finally, if you have any extremely unusual circumstances (sickness, job interview, or issue very unique from what all the other students have, etc.), which you inform us of, then we will not take off any late points for homework or projects (This should be rare).  Nothing can be accepted after the last day of class instruction.


Topics, Readings, Projects, and Homework Schedule:

University and Other Items: