This is the Discrete Mathematics course in the Department of Computer Science at Rice. It is called Algorithmic Thinking because we emphasize the use of algorithms and math in real-world applications. During COVID and due to moving online for part of Spring 2020 and all of Spring 2021, I had to record videos for the course. These were not high-quality, professionally recorded videos; instead, I used my iPad to record them. They are not proofread carefully so they might include a few typos here and there. Whenever students pointed out a mistake in the videos, I fixed that. All remaining mistakes are mine. I have now posted the videos publicly on YouTube in case they can be of use to someone. They can be accessed at my YouTube channel, under the Discrete Mathematics playlist (61 videos).

  1. Logic.
  2. Proofs.
  3. Graphs.
  4. Breadth-first search.
  5. Algorithm efficiency. (A note on constants C and k)
  6. Divide-and-conquer algorithms and the Master Theorem.
  7. Sequences and summations.
  8. Weighted graphs and greedy algorithms. (Analyses of Dijkstra’s and Prim’s algorithms, The Knapsack problem)
  9. Mathematical induction.
  10. Relations.
  11. Dynamic programming. (The longest increasing subsequence problem)
  12. Iterative improvement algorithms.
  13. Counting.
  14. Discrete probability.
  15. Markov chains and hidden Markov models (a note on Markov chains and HMMs)