Many colleges and universities offer a course in discrete mathematics. Students
taking these courses are from many disciplines, one of the largest
being computer science. As a part of the Mathematics Across the Curriculum
project at Dartmouth, supported by the National Science Foundation,1
we proposed to create a discrete mathematics course that directly addresses
the needs of computer science students. In analyzing what topics in discrete
mathematics we want our computer science students to know and why we
want them to know these topics, we made two observations.
First, there are a few topics we consider important to computer science that
are not always covered thoroughly, if at all, in traditional discrete mathematics
courses. Among these are recursion trees and the Master Theorem
for solving recurrence relations, the probability theory needed to compute
average run times and to analyze randomized algorithms, and an emphasis
on strong and structural induction.
Second, for each topic in discrete mathematics that we consider important
for computer science students, there is a motivating topic in computer
science that can be understood at the level of a first or second course in
computer science. We feel this makes it possible to answer the age-old question
students ask in applied mathematics courses: “Why do we have to learn
this?” We therefore chose to write a textbook with computer science students
in mind, with the objective of providing the necessary mathematical
foundations for a computer science major, motivated by computer science
problems that students can understand early in their study of computer
science.