This clearly written textbook presents an accessible introduction to discrete mathematics for computer science students, offering the reader an enjoyable and stimulating path to improve their programming competence. The text empowers students to think critically, to be effective problem solvers, to integrate theory and practice, and to recognize the importance of abstraction. Its motivational and interactive style provokes a conversation with the reader through a questioning commentary, and supplies detailed walkthroughs of several algorithms.
This updated and enhanced new edition also includes new material on directed graphs, and on drawing and coloring graphs, in addition to more than 100 new exercises (with solutions to selected exercises).
Topics and assumes no prior mathematical knowledge, and discusses concepts in programming as and when they are needed; designed for both classroom use and self-study, presenting modular and self-contained chapters that follow ACM curriculum recommendations; describes mathematical processes in an algorithmic manner, often supported by a walkthrough demonstrating how the algorithm performs the desired task; includes an extensive set of exercises throughout the text, together with numerous examples, and shaded boxes highlighting key concepts; selects examples that demonstrate a practical use for the concept in question.
Students embarking on the start of their studies of computer science will find this book to be an easy-to-understand and fun-to-read primer, ideal for use in a mathematics course taken concurrently with their first programming course.
I find this book to contain some unnecessary departures from common mathematical representations that are incredibly frustrating. For example, the author defines "the positive integers," "the nonnegative integers," and "all integers" as sets to introduce set notation.
However, for reasons I cannot really understand, the author uses P instead of N for the natural numbers (positive integers), and N instead of W for the whole umbers (nonnegative integers), despite N and W being commonly used to denote these sets. He does, thankfully, use Z to represent the integers.
Another minor, yet frustrating, detail comes from this same section. The author defines the set D={x: x is a number that can be displayed on my calculator}, and proceeds to state that D is a subset of Q (the rational numbers), ignoring that the majority of modern scientific and graphing calculators have no issue displaying irrational numbers such as π.
While this is a minor detail, the book is absolutely riddled with them. These small details can lead to confusion, which is something that should be avoided in a textbook. Precision in language is something I expect from my students, it is something I expect even more attention to from my textbooks.