Readings: Week 1 | Week 2 | Week 3 | Week 4 | Week 5 | Week 6 | Week 7 | Week 8 | Week 9 | Week 10 | Week 11 | Week 12 | Week 13 | Week 14

Various helpful resources will be collected here.

Please note: Readings for more than 2 weeks in advance are rough. As we get closer to the date, readings will be polished and tweaked (likely reduced) to reflect the topic of the week.

# Week 1: Intro, Number Representations, Logic

• Rosen: Chapter 1 Logic and Proofs
• Only 1.1 through 1.5; no 1.6-1.8:
• 1.1 Propositional Logic
• 1.2 Applications of Propositional Logic
• 1.3 Propositional Equivalences
• 1.4 Predicates and Quantifiers
• 1.5 Nested Quantifiers
• Rosen: Chapter 4, Section 4.2 (Integer Representations and Algorithms)

# Week 2: Functions and variables. Integer functions.

• Rosen: 2.3-- Functions

# Week 3: Sums and sequences. Arithmetic and geometric progressions.

• Rosen: 2.4-- Sequences and Summations.

# Week 4: Sets

• Rosen: Chapter 2
• 2.1: Sets
• 2.2: Set Operations
• 2.5: Cardinality of Sets
• 2.6: Matrices

# Week 5: Arrays, number theory. Divisibility, primes, etc.

• Rosen: Chapter 4
• 4.1: Divisibility and Modular Arithmetic
• 4.2: Integer Representations
• 4.3: Primes and GCD
• 4.4: Solving Congruences

# Week 6: Relations and recurrences.

• Rosen: Chapter 9 (Relations)

# Week 7: Lists, Stacks and Queues

These readings may provide a slightly different description of the data structures, and may be helpful.
• Helpful Overview (Ignore the code, or treat it as pseudocode):
• Intro to Data Structures. From MIT's intro to programming for Civil Engineers. A nice overview of the data structures we care about, but does use Java to show implementaton. We aren't worried about implementation yet, so ignore the code.
• Data Structures in Python (Chapters 3.5, 3.12). Chapters from the Python reading that's part of the required reading, but these sections start talking about implementation. Read this if you are ready to start thinking about the code related to these ideas, but we aren't worrying about implementation.
• LinkedList: (ignore the code, or at least, treat it like pseudocode)
• Linked List Data Structure. I really like this guy's discussion of data structures, but he's only covered Linked List and Doubly-Linked List (below). It's not required because he give Java, Javascript, and C++ implementations, and I don't want you guys to get put off by the code. If you can ignore the code, it is a great explanation.
• Stack:
• Stacks. Another good overview of a stack, with some real-world applications.
• Queue (ignore the code/treat it like pseudocode):
• Queue Data Structure Implementation. Again, same guy who did the Linked List reading above. No code in this one (but it's provided if you want to look at some, just no Python).

# Week 8: MIDTERM

• None

## Resources

• Sample exams questions and previous exams will be made available for practice.

# Week 9: Combinatorics

• Rosen: Chapter 6
• 6.1: The Basics of Counting
• 6.2: The Pigeonhole Principle
• 6.3: Permutations and Combinations
• 6.4: Binomial Coefficients and Identities
• 6.5: Generalized Permutations and Combinations

# Week 10: Intro to Algorithms.

• Algorithms Unlocked:
• Chapter 1: What are Algorithms and Why Should You Care?
• Chapter 2: How to Describe and Evaluate Algorithms
• Rosen:
• Chapter 3.2: Growth of Functions
Optional:
• Rosen, Chapter 3.3: Complexity of Functions
• Rosen, Chapter 3.1: Algorithms
• CLRS Chapter 3 (Growth of Functions)
• CLRS Chapter 1 (The Role of Algorithms in Computing)

# Week 11: Divide and Conquer Algorithms

• Cormen: Algorithms Unlocked, pp 40-59 (mergesort, quicksort)
• Rosen: Chapter 8.3: Divide-and-Conquer Algorithms and Recurrence Relations
Optional:
• CLRS 3e: Chapter 7, Quicksort
• CLRS 3e: pg 30-39 (Mergesort)

# Week 12: Algorithm Correctness, proofs. (Online lecture)

• Rosen: Chapter 5 (Induction and Recursion)