Kevin Sun


Algorithms (PDF)

These notes are primarily written for anyone studying 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. For a more thorough treatment of the material, I recommend the following textbooks. I think they are all very well written, and these notes draw heavily from them.

Of course, there are many other wonderful textbooks and resources not listed above, and I encourage you to seek them out.

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 think the book is excellent, and I strongly recommend it. When writing these notes, I also consulted other resources, most notably the following, which I also recommend:

These notes are not meant to be a substitution for the book; instead, I think of them as an unofficial companion to the book. I hope you find them useful.