Computer Science 344 Algorithms and Complexity Spring 2001

Dr. Stephen Bloch office 114 Alumnæ Hall phone 877-4483

                    email sbloch@adelphi.edu
            Web page http://www.adelphi.edu/sbloch/
     Class Web page http://www.adelphi.edu/sbloch/class/344/

office hours TTh 3–4, WF 9–12

January 4, 2001

1 Subject Matter

This is a course for anybody who’s ever complained about a computer being slow. When faced with a computer program that takes unacceptably long to solve the problem at hand, one option is to buy faster, more expensive computer hardware. But this option has its limits: perhaps your money will run out, or perhaps you’ll upgrade to the fastest computer on the market and still be unsatisfied. Often a better option is to find a more efficient approach to the problem — to re-think the algorithm so that it makes better use of the hardware. A $1,000 personal computer running a good algorithm can often outperform a $1,000,000 supercomputer running a bad (though correct) algorithm.

In this course we’ll learn how to measure the efficiency of an algorithm, independent of language, operating system, or hardware. We’ll survey a variety of techniques for designing efficient algorithms. (Many of these techniques will help you program correctly even when you’re not worried about efficiency.) We’ll even learn how to prove that a given algorithm is “as good as it can get,” in the sense that no algorithm, no matter how clever, will ever be better than this one.

2 Textbook

This course will involve reading assignments and homework exercises from the textbook Fundamentals of Sequential and Parallel Algorithms by Kenneth Berman and Jerome Paul. This book is required, and it’s the sort of book you’ll probably want to keep to refer to in subsequent courses and software projects. For any of you who are especially interested in this subject, I recommend a more advanced book, Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. I may also give out other reading assignments by email or in journals.

I hope to cover about three quarters of the Berman-Paul book: about 600 pages, so you need to read 10–15 pages per lecture, on average. Make time in your weekly schedule for this!

3 Prerequisites

I assume that everyone in the class has passed CSC-MTH 156 (Discrete Structures) or an equivalent course covering Boolean logic and algebra, graphs and trees, and perhaps recurrence relations. I also assume that everyone in the class has passed one or more programming courses; I don’t care about the language, as long as you have written and debugged a number of programs and are familiar with the notions of algorithm, recursion, loop, array, linked list, etc.

4 Grading

As I write this (two weeks before classes start), I envision 6 homework assignments, each worth 12.5% of the semester grade, a midterm worth 10%, and a final exam worth 15%. If we get behind schedule, we’ll actually do fewer assignments than this; I’ll try to keep an up-to-date schedule on my Web page.

Exams must be taken at the scheduled time, unless arranged in advance or prevented by a documented medical or family emergency. If you have three or more exams scheduled on the same date, or a religious holiday that conflicts with an exam or assignment due date, please notify me in writing within the first two weeks of the semester in order to receive due consideration. Exams not taken without one of the above excuses will be recorded with a grade of 0.

Homework assignments will be accepted late, with a penalty of 10% per 24 hours or portion thereof after they’re due. An hour late is 10% off, 25 hours late is 20% off, etc. Any homework assignment turned in more than ten days late will get a zero. Any homework assignment turned in after May 9 (the second to last day of class) will get a zero. (This is so I have, perhaps, time to grade them before the final exam.)

There will be several kinds of homework in this class. At one extreme are the analysis and “thought” problems on paper, resembling problems in a math class. At the other extreme are programming assignments, which may be written in any language that you and I both know and that runs at Adelphi (e.g. Scheme, Prolog, Java, C, C++). In between are pseudocode assignments: these need to be precise descriptions of an algorithm, like a computer program, but they don’t need to meet the syntactic requirements of a compiler (only a human being will read them) and you can ignore details that aren’t relevant to the problem at hand.

5 Ethics

Assignments in this class are to be done either individually or in teams of two; in the latter case, you may not do multiple homeworks with the same partner. You may discuss general approaches to a problem with classmates, but you may not copy large pieces of programs or homework solutions. If you do, all the students involved will be penalized (e.g. I’ll grade the assignment once and divide the points equally among the several people who turned it in).

All work on an exam must be entirely the work of the one person whose name is at the top of the page. If I have evidence that one student copied from another on an exam, both students will be penalized; see above.

6 Schedule

This class meets every Monday, Wednesday, and Friday from 12:00-12:50 PM, except on University holidays or if I cancel class. All dates in the following schedule are tentative, except those fixed by the University. I expect you to have read the reading assignments before the lecture that deals with that topic; this way I can concentrate my time on answering questions and clarifying subtle or difficult points in the textbook, rather than on reading the textbook to you, which will bore both of us. Please read ahead!