I have been plugging away at discrete math for a while now. I can say, with no reservations, that it has been worth it. I did not just decide one day to study DM. This all started as an attempt to understand graph theory as it applies to workflow analysis. Books and papers I have read about workflow analysis seem to fall into two broad categories: those that are mostly descriptive in nature and those that are mathematical.
Descriptive workflow writings depict workflows using flowcharts, swim lane diagrams, or analogous representations. These diagrams are accompanied by narrative descriptions of what they represent. Different authors use different ways of representing and describing workflows, making it difficult to compare one author’s methodology with that of another.
When I read Will van der Aalst’s book on workflow management, I found the mathematical treatment of workflow using graph theory to be semantically more precise and easier to relate directly to programming code than the descriptive sources. After reading Steve Yegge’s blog, I realized that graph theory might be the key to creating better workflow algorithms. Therefore, I decided to study discrete math.
The first problem I ran into was trying to find a decent book. I considered the book Yegge mentioned in his blog, Discrete Mathematics and Its Applications, by Kenneth Rosen. Amazon reviews of Rosen’s book stated that it was dense and sometimes difficult to follow. Discrete Mathematics with Applications, by Susan Epps had a reputation for being easier to understand and better for self-study, so I went with it. I am very glad I did. It is one of the best math books I have ever read. The author explains concepts in detail, and in plain English, while introducing formal math notation. Sample exercises occur throughout the narrative, which helps reinforce the points made. Additional exercises appear at the end of each chapter and detailed solutions are given in the appendices. Both books provide online resources for additional study.
I decided to follow a standard curriculum for an undergraduate course. Fortunately, plenty of undergraduate courses materials available via a Google search. MIT Open Courseware has a complete course available online.
Thus far, I have covered propositional and predicate logic, set theory, and functions in depth. Even this limited number of topics has enabled me to understand algorithms better—a major plus. Also, hexadecimal is no longer a pain. Even though I started this quest because of graph theory, so far I have skimmed only a couple of sections on this topic. The chapters on logic are so clear and interesting that I have delayed reading about graph theory in order to do the chapters on elementary number theory, methods of proof, sequences, and induction. Yeah, I know—right? These topics are supposed to be less exciting than watching paint dry, but what can I say? At the current rate, unless life intervenes, I hope to get to graph theory in a couple of months. Not to worry, I am enjoying every moment. In case anyone wishes to join me, below is a list of resources that I have found useful. Enjoy. Seriously.
Schaum’s Outline of Discrete Mathematics, Revised Third Edition
Overall, this a good resource for practice questions. However, the logic section seemed too basic.
How to Prove It: A Structured Approach. D Velleman
This is a great book for learning to read and do proofs. The terminology and symbols are very close to those used by Dr. Epps, which made it easy for me to follow. I wrote to Dr. Velleman and he was kind enough to send me an updated problem set for the most recent edition of the book.
Support site for Discrete Mathematics with Applications. S Epps
This site has a range of exercises and links to web resources
Math for Computer Science, MIT Open Courseware
This site provides a complete course text along with syllabus, notes, exams, and problem sets.