Algorithms (PDF)
These notes cover topics in algorithms at a standard undergraduate level. They assume familiarity with fundamental programming concepts (e.g., arrays, loops), discrete math (e.g., basic set theory, graphs), and asymptotic notation. I recommend the textbooks below for further reading; these notes are primarily based on them:
- Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
- Algorithms by Dasgupta, Papadimitriou, and Vazirani
- Algorithms by Erickson
- Algorithm Design by Kleinberg and Tardos
- The Algorithm Design Manual by Skiena
Theory of Computation (PDF)
These notes are primarily written for anyone studying from the book Introduction to the Theory of Computation by Michael Sipser, specifically the third edition. (In these notes, whenever I refer to "the book," I am referring to that book.) I recommend the book; I think it is excellent. While writing these notes, I also consulted other resources, most notably the following, which I also recommend:
- Introduction to Theoretical Computer Science by Barak
- Models of Computation by Erickson