These are materials for the course "Fundamental Algorithms" taught by Jonathan Goodman in the Spring term of 1998 at the Courant Institute of Mathematical Sciences, NYU. The lectures are Wednesday evenings from 7 to 9 pm in room 101 of Warren Weaver Hall, starting January 21. The problem sessions are Mondays from 7 to 8 pm in the same room. My office hours are Mondays 8pm to 9pm (after the problem session) and Tuesdays 4pm to 6pm. If you cannot make these times, please contact me for an appointment. This course is part of the Masters degree program in Computer Science at the Courant Institute
Prerequisites: Basic computer science at the undergraduate level. This includes experience with a high level programming (such as Pascal, C, or Java), familiarity with recursion and recursive programming methods, and basic data structures (arrays, pointers, stacks, queues, and trees). Mathematics including exponentials, logarithms, differentiation, and integration. Actually, the course contains review of many of these topics, so it is suitable for people whose analytical skills are rusty.
Purpose: The algorithms, data structures, and analyses discussed in this course are the main tools of the trade for all of computer science. In that sense, this course is the prerequisite for all the rest of computer science.
Material: The course begins with a review of the mathematical foundations of algorithm analysis. This includes the "big O" notation, asymptotic orders of magnitude, recurrence relations, and basic probability (for analyzing average running time). We then describe and analyze the major algorithms for sorting (bubble sort, merge sort, heap sort, quick sort, radix sort, ...). Next comes storage and retrieval strategies, first hashing, then trees. After that, we discuss graphs and graph algorithms (depth first search for connected components, Kruskal's and Prim's algorithms for minimum spanning trees, Dykstra's algorithm for shortest paths, ...). If time permits, I want to touch on parallel computing.
Grading: The course will be graded on the basis of weekly written homework assignments and a final exam. There will be no programming assignments.
Texts: The required course text is Introduction to Algorithms by Thomas Coreman, Charles Leiserson , and Ronald Rivest (called CLR). This book should be available at the NYU bookstore. Students will probably find An inside Guide to Algorithms: Their Application, Adaptation, Design, and Analysis, by Alan Siegel and Richard Cole, (called SC) both in our Computer Science department, a very helpful supplement. These notes (actually, the draft of a book) may be purchased at the Unique Copy Center (252 Greene St., down the block from Warren Weaver Hall, (212)420-9198 ).
Teaching assistants: Ye Sun and Chung Yung. They will grade homeworks and hold office hours. You may contact them by email with questions or comments. They will contact me regarding questions or comments they cannot answer themselves. They may bring something to my attention without telling me who they heard from.
Final exam: Wednesday, May 6, at 7pm in the same room. Actually, I'm not certain about the room, but if it's different, the new room will be posted on the current room door. The exam will last two hours and will cover material from the whole semester. There will be some questions of the difficulty of the homework questions and some easier questions about how the various algorithms work. You can download the final exam (slightly edited from the version I actually gave, in order to fit better on the page and correct some minor errors that were found during the exam). The source consists of a TeX file and a figure that was translated form a .fig file to a .eps file. The postscript file is also available, as is a version translated into HTML.
Each week, I will post the topic of the lecture and suggested readings from the two texts that cover the same material. If you are preparing for the Computer Science Department core exam, you should get copies of previous exams and do the questions as the course proceeds. You should be able to do the unstarred exercises in CLR. Note on code fragments: I am using code fragments to illustrate many of the algorithms. They are written in a polyglot computer language that draws on the greatest of the existing computer languages, namely FORTRAN, Pascal, C, and C++. I hope it is clear what they do, even they do not rigorously follow any particular algorithm convention. Please report bugs in these fragments to me. You may argue about programming style if you have standing to do so (e.g. are an expert in software engineering).
For a basic motivation of the subject, read chapter 1 of CLR and/or SC.
I will try to assign a new homework assignment each week. Homework assigned on Wednesday will be ue on Monday, 12 days later, at 7pm. (unless there are NYU holidays in between). Note: this represents a change of policy from what this page originally said. You should download the assignments from this page. You may download the LaTeX source or the postscript suitable for printing on a postscript printer. As a last resort, you can download a version that has been translated into HTML. If you do, you will see that the translator is less than perfect.
Note: I fixed in bug in assignment 2, question 3 on Monday,
Feb 9.
Send email to Jonathan Goodman
Back to Jonathan Goodman's home page.
Back to the Computer Science Department
home page.
Back to the Courant Institute home page.
Back to the home page or the NYU Graduate
School of Arts and Sciences