A person well-trained in computer science knows how to deal with algorithms: how to construct them, manipulate them, understand them, analyze them. This knowledge prepares him for much more than writing good computer programs; it is a general-purpose mental tool which will be a definite aid to his understanding of other subjects, whether they be chemistry, linguistics, or music, etc. The reason for this may be understood in the following way: It has often been said that a person does not really understand something until he can teach it to a computer, i.e., express it as an algorithm.Donald Knuth
What is this course?
Algorithms are the engines of a great majority of systems, natural and artificial alike. This course explores a variety of algorithms and the mathematics used to reason about algorithms. This course emphasizes understanding and reasoning about algorithms, but also includes some implementation.