CS 354 - Algorithm Design and Analysis - Spring 2016

Description

A visualization of insertion sort. Don't worry – there are faster ways to sort, and we'll be learning about them.

Algorithms are everywhere in CS — every program is an algorithm. Some algorithms warrant closer attention: those that are used and reused frequently, that are critical for an application's performance, or that solve important problems in CS in particularly elegant ways. These algorithms are often tightly coupled with particular data structures. This course examines algorithms and their data structures with an eye towards analyzing their efficiency and designing new algorithms in similarly efficient ways.

The fundamental goal of this course is to give you:

  1. The tools needed to analyze existing algorithms or solutions to problems you may encounter in the future.
  2. A library of common data structures and algorithms with known efficiencies that you can draw upon and apply to new problems.
  3. A set of techniques and an intuition for how to design new algorithms and/or data structures to suit the requirements of future programs you develop.

For an idea of the specific topics covered in the course, see the rough schedule for the semester.

Details

When/Where: TR 10:50AM-12:05PM / CNS E201

Instructor: Mark Liffiton
Office: CNS C207B   (2nd floor CNS, directly above entrance from quad)
Office Hours: (visual schedule) MW 10-12; TR 10-10:40; T 4-5; by appointment F 10-12; or email/drop in any time.
Contact: Email is preferred (please start the subject with "CS354:").
     For more pressing matters, my office # is 309-556-3535.

Other Pages

Semester schedule — tentative - see the Moodle for up-to-date details.

Online References — online textbooks, alternative sources, and general reference.

Moodle — assignments, quizzes, announcements, and other online resources will be here.

Textbook(s)

The "primary" but optional textbook, whose organization I will be following and from which I will be drawing a decent amount of material is The Design & Analysis of Algorithms by Anany Levitin; however it is not required for the course.

TitleIntroduction to the Design and Analysis of Algorithms (3rd edition)
AuthorAnany Levitin
ISBN0132316811

I like its organization and feel it has good, clear explanations. I will generally follow its sequence of topics, draw on it for lectures, and most likely use some exercises from it as well. However, the topics in this course are covered quite well in a wide range of resources that are available freely online. I will point out alternative (free, online) sources for all of the concepts we cover in class. You will never absolutely need the chosen textbook, and I will make sure that any exercises I use from it are reproduced in the assignment.

Therefore, you can buy the primary textbook or you can find relevant readings and explanations for anything we cover online. I will strongly encourage you to use these other resources whether you have the book or not. Owning the book, or another textbook, will give you an easy "one-stop" source, however.

Some material will not be in the primary textbook at all (primarily parallel algorithms), but I will provide alternative resources for those, just like everything else.

It may be worthwhile to get together with other people in the course and buy or borrow two or three different textbooks to share. I've found study groups to be incredibly useful for this sort of material, and sharing textbooks is a natural extension of that. I will suggest other books here, if you're interested in this approach.

One option, with good explanations and a lot of motivating real-world examples of algorithm design and analysis:

TitleThe Algorithm Design Manual
AuthorSteve Skiena
ISBN1848000693

A decent textbook for much of the parallel algorithms content:

TitleAlgorithms: Sequential, Parallel, and Distributed
AuthorKenneth A. Berman and Jerome L. Paul
ISBN0534420574

And finally, a very well-known, highly-respected, and quite dense book that is probably good for any computer scientist to have on his or her bookshelf:

TitleIntroduction to Algorithms (3rd edition)
AuthorCormen, Leiserson, Rivest, and Stein (the book is commonly referred to as "CLRS")
ISBN0262033844

Language

Algorithms are language agnostic. They can be, and generally are, designed and analyzed in pseudocode, outside of the confines of any real programming language. Furthermore, any algorithm we study here can be implemented in any Turing Complete language. You'll be writing working code in this class, though, and for that you need to use a programming language.

Some parts of the course require a particular language (e.g., we have MPI bindings setup for C++ and Python only), and for the rest, you will use it to learn a new language. In particular, you will learn and use Java if you don't have much experience with it yet. If you feel competent in Java, though, come talk to me, and we can potentially choose a difference language for you to use for assignments. I am happy to help you, at any point, with code written in any language, whether it's a programming assignment or just something you wrote up to explore a concept. Some I know better than others, of course.

Overall, we can be flexible in this class, and I am open to your ideas on how we can make it as educational and enjoyable as possible.

Grading

The final grade will be based on the following breakdown:

Assignments25%
Exam 120%
Exam 220%
Final Exam25%
Engagement10%

Assignments

* You can create PDFs from any document in OS X (instructions) or in Windows (using a free tool like DoPDF).
LibreOffice, Google Docs, and many other word-processing applications can produce PDFs directly, as well.

Assignments will be posted on the course's Moodle site, usually about a week before they are due, and they will be collected there as well. Submissions should be in the form of plain text or PDF* for writing assignments, or .tar.gz archives for programming assignments. I will describe the expectations for submitting .tar.gz files in the assignment. I will aim to get them graded and returned to you by the following week.

Your lowest assignment score will be dropped.

Late Policy

Assignments will be due at set times; they will be considered late at any point after that time. An assignment will lose 10% of the total possible points for every day it is late, and after five days it will not be accepted.

Assignments can't be accepted at all after solutions have been handed out or the graded work has been returned to the class.

Exams

There will be two exams during the semester, and the second will primarily focus on the material seen since the first exam. The final will be cumulative. See the schedule for exam dates.

Curving/Scaling

As you may have heard from other teachers: If everyone does well, that's great! I'm not going to lower anyone's grade to fit some predetermined grade distribution. However, scores given on individual quizzes or exams (especially exams) may not translate directly into a letter grade on the traditional scale. As explained quite well here:

"A percentage shows how much of a particular exam was dealt with successfully, but what test is so perfect that it could completely determine extent of knowledge or ability? If a student gets a grade of 90%, it does not mean they know 90% of everything in the subject. Wise students will begin to look at scores as a place on a continuum of achievement rather than analysis carved in stone."

Regrading

If you would like to request a regrade, submit a request in writing (via email) within one week of receiving the graded assignment, exam, etc. Indicate exactly which part you believe deserves a different score and why.

Engagement / Attendance

Class time will be complementary to the reading, and you will need both in order to learn all of the material in this class. Furthermore, each student benefits from the engagement of all others in the class. Ten points of your final grade will be based on that engagement. Attending every class period on time and prepared will earn a base of 7 points; points can be gained by constructive participation, in class or out, such as asking questions, answering them, responding in the forum, sharing insights or useful/interesting resources with the class (posting in the forum, for example), investigating concepts beyond the requirement in class, working on small independent learning projects, and in many other ways; points can be lost for excessive (more than 3) unexcused absences, disrupting class (e.g., regularly showing up late), dominating the conversation, and the like.

Absences can be excused with documentation from health services or the Dean of Students' office, or if arrangements are made with me more than a week in advance. In general, if you know you will be missing a class, let me know as soon as you do.

Working with Others

I strongly encourage you to form study groups with your classmates, compare notes, explain concepts to one another, and generally help each other learn the material in this course.

Any material turned in for a grade must be your own individual work, though. You may work on concepts with other students, but I ask that you not discuss assigned problems until after the work has been turned in. Giving or even showing your code to another student is not allowed.

This has two goals: 1) let the grades be a reflection of each student's own work, and 2) avoid situations where one person solves a problem and another records the answer as their own work without really learning. I understand that the line between discussing concepts and solving problems can be vague, so I ask that you use your own judgement with those two goals in mind and ask me if a situation is unclear.

Try to follow this rule of thumb: No matter what help you received figuring out the concepts involved, when you turn something in you should be able to reproduce the whole thing, working through the assignment again, without any outside help. And again, if you ever think you might be near the line, just ask me to be safe.

For details on the university's policies regarding academic honesty, please read the sections of the student handbook on conduct, cheating, and plagiarism here. Cheating of any form can result in failing the course and a report to the associate provost.

End-of-Syllabus Advice

Use the web. The topics in this course are covered widely in a great variety of resources online. The Youtube video above is just one example, and such things are, in my opinion, very helpful learning tools. The online references page lists many others. Supplement our time in class and the book, if you have it, with resources on the web. I have provided links to some resources I think are valuable, but you should go out and find more as well. Search the whole web for a topic and see what comes up; use wikipedia (which will likely rate highly in the web search anyway) to get another view and to see links to related concepts; do a video search (or head straight to youtube) for visualizations or lectures; check out course websites for algorithms classes at other universities... Every single one of these will turn up something good. And when you find something that helps you, share it with the rest of us by posting in the forum on Moodle or sending me an email!