Introduction to Algorithms, McGraw-Hill Science/Engineering/Math; 2nd edition, 0072970545
The main point of this course is to develop techniques for analyzing and designing algorithms. We begin the semester by studying two important mathematical techniques for analyzing algorithms: namely big-O notation and recurrence relations. We will then study several problems and algorithms that fall into three broad categories of algorithms: divide-and-conquer, dynamic programming, and greedy. The course will conclude with an introduction to computational complexity theory and NP-Completeness.
Each lecture is supplemented with a lecture outline that is available online in pdf format. The lecture outlines, when completed in class, are meant to serve as a useful set of course notes. They can be found at http://www.cecs.csulb.edu/~ebert/teaching/spring09/528/lectures.html
There will be three exams given, including the final exam. Each is equally weighted as one third of the final grade. The exams will contain problems that are similar to those found in the writing assignments given each week. Students are encouraged to hand in selected problems from each writing assignment for grading and feedback. Although solutions to the problem sets will be distributed each week, it is important that the problems are attempted before reviewing the solutions.
Generally speaking, "A" exams will score at least 70-75% of the total points, "B" exams at least 50-55%, and "C" exams at least 35-40%.