This book evolved over the past ten years from a set of lecture notes developed while teaching
the undergraduate Algorithms course at Berkeley and U.C. San Diego. Our way of teaching
this course evolved tremendously over these years in a number of directions, partly to address
our students' background (undeveloped formal skills outside of programming), and partly to
reect the maturing of the eld in general, as we have come to see it. The notes increasingly
crystallized into a narrative, and we progressively structured the course to emphasize the
story line implicit in the progression of the material. As a result, the topics were carefully
selected and clustered. No attempt was made to be encyclopedic, and this freed us to include
topics traditionally de-emphasized or omitted from most Algorithms books.
Playing on the strengths of our students (shared by most of today's undergraduates in
Computer Science), instead of dwelling on formal proofs we distilled in each case the crisp
mathematical idea that makes the algorithm work. In other words, we emphasized rigor over
formalism. We found that our students were much more receptive to mathematical rigor of
this form. It is this progression of crisp ideas that helps weave the story.
the undergraduate Algorithms course at Berkeley and U.C. San Diego. Our way of teaching
this course evolved tremendously over these years in a number of directions, partly to address
our students' background (undeveloped formal skills outside of programming), and partly to
reect the maturing of the eld in general, as we have come to see it. The notes increasingly
crystallized into a narrative, and we progressively structured the course to emphasize the
story line implicit in the progression of the material. As a result, the topics were carefully
selected and clustered. No attempt was made to be encyclopedic, and this freed us to include
topics traditionally de-emphasized or omitted from most Algorithms books.
Playing on the strengths of our students (shared by most of today's undergraduates in
Computer Science), instead of dwelling on formal proofs we distilled in each case the crisp
mathematical idea that makes the algorithm work. In other words, we emphasized rigor over
formalism. We found that our students were much more receptive to mathematical rigor of
this form. It is this progression of crisp ideas that helps weave the story.