6.042J | Spring 2015 | Undergraduate

Mathematics for Computer Science


Course Meeting Times

Lectures: 3 sessions / week, 1.5 hour / session


This subject offers an introduction to discrete mathematics oriented toward computer science and engineering.

The subject coverage is divided into three parts:

  1. Fundamental concepts of mathematics: Definitions, proofs, sets, functions.
  2. Discrete structures: Elementary number theory, graphs, counting.
  3. Discrete probability theory.


The prerequisite is 18.01 Single Variable Calculus. In particular, some familiarity with sequences and series, limits, and differentiation and integration of functions of one variable are necessary.


Upon completion of 6.042J, students will be able to explain and apply basic methods of discrete (noncontinuous) mathematics in computer science. They will be able to use these methods in subsequent courses in the design and analysis of algorithms, computability theory, software engineering, and computer systems.

In particular, students will be able to:

  1. Reason mathematically about basic data types and structures (such as numbers, sets, graphs, and trees) used in computer algorithms and systems; distinguish rigorous definitions and conclusions from merely plausible ones; synthesize elementary proofs, especially proofs by induction.
  2. Model and analyze computational processes using analytic and combinatorial methods.
  3. Apply principles of discrete probability to calculate probabilities and expectations of simple random processes.
  4. Work in small teams to accomplish all the objectives above.

Learning Outcomes

At the end of this course, students will be able to:

  1. Use logical notation to define and reason about fundamental mathematical concepts such as sets, relations, functions, and integers.
  2. Evaluate elementary mathematical arguments and identify fallacious reasoning (not just fallacious conclusions).
  3. Synthesize induction hypotheses and simple induction proofs.
  4. Prove elementary properties of modular arithmetic and explain their applications in computer science, for example, in cryptography and hashing algorithms.
  5. Apply graph-theoretic models of data structures and state machines to solve problems of connectivity and constraint satisfaction (e.g. scheduling).
  6. Apply the method of invariants and well-founded ordering to prove correctness and termination of processes and state machines.
  7. Derive closed-form and asymptotic expressions from series and recurrences for growth rates of processes.
  8. Calculate numbers of possible outcomes of elementary combinatorial processes such as permutations and combinations.
  9. Calculate probabilities and discrete distributions for simple combinatorial processes; calculate expectations.
  10. Problem solve and study in a small team with fellow students.

Team Problem Solving

6.042J is taught as a “flipped” class: Students prepare by doing assigned reading and answering online questions before class. Class meeting time is then devoted almost entirely to problem solving in teams of 6 to 8 students sitting around a table with a nearby whiteboard where a team can write their solutions. Participation in team sessions counts for 25% of the final grade.

The sessions are open book, and laptops, tablets, etc., are encouraged for viewing class related material.

Each team has a Teaching Assistant / Lab Assistant coach providing feedback on students’ solutions. The coach will initially resist answering questions about the material, always trying first to find a team member who can explain the answer to the rest of the team. Of course the coach will provide hints and explanations when the whole team is stuck. Instructors circulate among the teams overseeing class activity.

The good news is that the immediate, active engagement in problem solving sessions is an effective and enjoyable way for most students to master the material. Team sessions also provide a supervised setting to acquire and practice technical communication skills. Student grades for problem solving sessions depend on degree of active, prepared participation, rather than problem solving success. Sessions are not aimed to test how well a student can solve the problems in class; the goal is to have students understand how to solve them by the end of the session.

The bad news is that a team problem solving approach to teaching requires students to arrive prepared at the sessions: They need to do (though not carefully study) the assigned reading and do the online problems before class. The team problem solving aims to help solidify students’ understanding of material they have already seen. Watching designated videos, or at least looking at the lecture-slide handouts, is generally helpful but optional. We expect that class preparation, including assigned reading and online material, will take 1.5 hours per class.

Problem Sets

Problem sets count for 15% of the final grade. Making a reasonable effort on the problem sets is, for most students, crucial for mastering the course material. Problem sets are designed to be completed in at most 3 hours; the time is monitored through student reports.

Online Feedback Problems

Online problems to be completed before most class meetings are posted on the class website. These consist of straightforward questions that provide useful feedback about the assigned material. Some students prefer to try the online problems before reading the text or watching videos as an advance guide to going over the material; that’s fine. Watching designated videos, or at least looking at the lecture-slide handouts, is generally helpful but optional.

Like team problem-solving in class, online problems are graded solely on participation: Students receive full credit as long as they try the problem, even if their answer is wrong. Online feedback problems count for 5% of the final grade.


You are encouraged to collaborate on problem sets as you do on teams in class. However, you must cite all your collaborators and any sources beyond this term’s class materials that you consulted while working on a problem—for example, an “expert” consultant other than 6.042J staff, or another text—must be given a proper scholarly citation, which you should include with your submission.

A problem from prior terms may occasionally be assigned again without change. If you find a published solution, you should cite it, and you may not simply copy it. Instead, submit a critique of the published solution, an improved solution, or a suggestion for an improved or variant version—basically any commentary that shows engagement with the material comparable to that required to solve the problem on its own.

Midterm Exams

Three 80 minute midterm exams will be given. The midterm exams each count for 10% of the final grade.

Midterm questions will typically be variations of prior problems from class and psets, and the best way to prepare is to review on the published solutions to these problems. The first exam covers all previous weeks’ material; subsequent exams focus on the material after the previous exam. Induction will be covered on Midterm 1. A single two-sided crib sheet is allowed for each midterm.

Final Exam

There will be a three hour final exam. This exam is worth 25% of the final class grade.

The final exam will cover the entire subject with somewhat greater emphasis on material from after Midterm 3. Most exam questions will be variants of problems assigned during the term (pset, class, midterm, and online). It may include a few questions which combine topics that were originally covered separately. A pair of two-sided crib sheets (total: 4 sides) are allowed for the final.


Grades for the class are based on the following weighting:

Class participation 25%
Online Feedback Problems 5%
Problem Sets 15%
Midterm Exams 30%
Final 25%

The lowest problem set score and lowest three class session scores will not count in grade calculation.

Course Info

Learning Resource Types
Online Textbook
Lecture Videos
Lecture Notes
Problem Sets