Description: This course is concerned with the design and analysis of efficient computer algorithms. What constitutes efficiency and how it is measured are two of the topics which will be discussed early in the semester. After that we will approach the subject by investigating some of the most well-known and effective non-numeric algorithms and the methods of design that they illustrate. While efficient solutions to many important computational problems will be presented, the goal is not to be encyclopedic but rather to learn how one attempts to apply general principles in order to create effective programs. Of course an algorithm is not of much use unless we are certain that it solves the problem for which it was designed. Thus verifying the correctness of the algorithms we investigate will be of central importance in the course. Then, after each algorithm is designed and 'debugged' (that is, proven correct), we will be interested in measuring its efficiency.
Exams: There will be one mid-term exam and a final exam. Each of these exams will be 24-hour take-home exams. The mid-term is scheduled for the week of March 12-16.
Grades: Your grade will be computed (roughly) as follows:
Midterm and Final Exams 35% (each)
Homework & Programs 30%
Programs: There will be a few programming assignments given during the course of the semester. The programs are to be implemented on the department's UNIX or Macintosh computers. You will each be given an account on our UNIX network at the beginning of the semester. I will expect you all to read your e-mail there regularly. If you prefer to read e-mail from a different network, please set up your mail to forward properly. You may write your programs in Java, C or Pascal. Any other language must be approved by me. I will generally be sympathetic to other languages as long as they don't have most of the solution built-in.
Reading & Homework: It will be well worth your while to skim over the day's lecture material before class and then read it carefully after class. I will not be covering all of the material in the sections assigned during class time. You will be responsible for learning the extra material on your own.
The best way to learn this type of material is by doing, and consequently, most of the work for this course will consist of working through the problems assigned for homework. Your homework grades will be an important part of your final grade for the course. Problems will be assigned and collected daily (with some exceptions). Of the problems assigned each day, all should be worked but only a few will be designated as problems to be handed in.
Homework will be due two class periods after it is assigned. Homework must be turned in at the beginning of class on the day it is due. After this time, the work will not be accepted (or graded). As an acknowledgment that the unexpected does occasionally happen, the two or three lowest homework grades of each student will be dropped when computing the final grade. Any student who turns in too few homework assignments during the course of the semester will be asked to withdraw from the course.
Honor Code: The honor code will be strictly enforced in this course. It is a violation of the honor code to give or receive assistance on an exam. It is an honor code violation to give or receive assistance on a homework assignment unless credit is given for all collaboration or assistance. All students must include a statement on all homework detailing all collaboration or assistance given or received. The statement must detail the problems involved, the type of collaboration or help, and the persons involved. Papers without this information will not be graded. If I believe any student is depending too much on others, I will inform them that they must receive less help in the future, but no points will be deducted from homework turned in to that point. All solutions must be written up independently. Copying another person's solution is always a violation of the honor code.