Solution 1:

If you are going to study computer science, you want to read Graham, Knuth, Patashnik: Concrete Mathematics.

Look into solving recursion, combinatorics and maybe a little stochastics. Getting the hang of infinite sequences and series is also advisable. Above stated book covers that all because it is made for computer scientists. You should have math courses covering all that, though.

Solution 2:

There are a lot of really nice resources out there, depending on what you are more interested in. In fact, it's easy to get overwhelmed by the sheer number, so I'll restrain myself to recommending a few favorites.

My first (and favorite) choice for this is Introduction to Mathematical Structures by Steven Galovich. The book begins with a chapter on logic, axiomatic methods, and proof methods, which I think does one of the best jobs at motivating not just the traditional methods of expressing these mathematical ideas, but methods of thinking about these ideas. Galovich then continues with the classic topics of set theory, relations, cardinality, combinatorics, graph theory, and algebraic structures. This is a relatively short book, which doesn't give as wide or thorough coverage to everything one might term "discrete math" as Rosen's text mentioned above (and it's not generally mentioned in situations like this do to its sections on more infinite matters), but I think is truly one of the best starting points do to its wonderful explanations of interesting mathematical ideas and emphasis on getting people to think mathematically. For instance, to give you an idea of what I mean by this, here is a statement from the introduction of a suggestion for readers:

In general, read this book with a sharp pencil in hand, plenty of paper nearby, and several questions in mind. A list of questions might include the following:

  1. What is the essence of this theorem, example, or definition?
  2. Can I come up with an outline of a proof of the theorem?
  3. Do I understand all the steps in the proof?
  4. What is the main idea of the argument?
  5. Can I draw a picture illustrating the situation?
  6. Am I stuck? If so, where am I stuck? Can I review some material to help me get unstuck? Are there examples that I can consider to help me understand the given situation?

There is also a newer book by Galovich which I have heard is both very good and very similar, called Doing Mathematics: An Introduction to Proofs and Problem-Solving which may be easier to find in person, if you are not a fan of ordering books online (although it's hard to imagine a much better deal than the $15 I linked to for Galovich's Structures).

The above is one of the best resources for learning to think mathematically (which, for my money, is usually the thing most desired in situations such as this), but if you want more exposure to particular areas of discrete math, or even a good overview of all the topics which might come under the heading "discrete math" then it won't cut it alone.

Rosen's book (mentioned above, Discrete Mathematics and Its Applications) is, I would say, the most thorough of all possible options, covering almost any topic that one might ever consider calling "discrete math," and doing so reasonably thoroughly. I think that, as such, Rosen makes a very good reference book, but I would not recommend it as a starting place for self study as I think that Rosen does a very poor job of motivating ideas and explaining difficult concepts.

As such, if you want a friendlier introduction to a lot of the different ideas of discrete math, I would recommend Discrete Mathematics by Lovasz. This book does an exceptional job of giving an introduction to many areas of discrete math, with good motivation for why you would be interested in these questions in the first place, and very friendly discussion of ideas. The downside of this book that I see is that sometimes it feels as if it carries the "friendliness" a bit too far, to a point where one feels a lack of rigor, but if you read this accompanied by another book such as Galovich's emphasizing the importance of good mathematical arguments, I think you should be in good shape.

Hope this helps, and good luck with your studies!

PS: Finally, after all of this typing, I'm going to provide a link to one of my favorite humorous articles: "The Uses of Fallacy," which I was provided by my professor when I first embarked on a course using mathematical logic, which I think is a fun look at the ideas of another field we've been working in for a long time without realizing it: generalized logic. "In Classical Logic, a Theorem consists of a True Statement for which there exists a Classical Proof. In Generalized Logic, we relax both of these restrictions: a Generalized Theorem consists of a Statement for which there exists a Generalized Proof."

Solution 3:

I think Kenneth Rosen's book on Discrete Mathematics does a good job of being exhaustive. Although I have heard mixed reviews of the book from others, I myself, began studying discrete mathematics from this book and was very happy with it.